Pygameの勉強 *スプライトを使おうの巻*
スプライトっていうのは、ゲーム背景とは別に動く画像を指す。
Pygameにはスプライトをを表すモジュール、pygame.spriteがある。これを使うと、スプライトの管理、描画、衝突判定が簡単にできるんだって。
コードを見てみよう!!
#! /usr/bin/env python # -*- coding: utf-8 -*- import pygame from pygame.locals import * import sys SCR_RECT = Rect(0,0,640,480) class MySprite(pygame.sprite.Sprite): def __init__(self,filename,x,y,vx,vy): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(filename).convert_alpha() width = self.image.get_width() height = self.image.get_height() self.rect = Rect(x,y,width,height) self.vx = vx self.vy = vy def update(self): self.rect.move_ip(self.vx,self.vy) #壁にぶつかったら跳ね返る if self.rect.left < 0 or self.rect.right > SCR_RECT.width: self.vx = -self.vx if self.rect.top < 0 or self.rect.bottom > SCR_RECT.height: self.vy = -self.vy #画面からはみ出さないようにする self.rect = self.rect.clamp(SCR_RECT) def draw(self,screen): screen.blit(self.image,self.rect) def main(): pygame.init() screen = pygame.display.set_mode(SCR_RECT.size) pygame.display.set_caption('Sprite') backImg = pygame.image.load('see.jpg').convert() #スプライトを作成 python1 = MySprite('pythonImg.png',0,0,2,2) python2 = MySprite('pythonImg.png',10,10,5,5) python3 = MySprite('pythonImg.png',320,240,-5,3) clock = pygame.time.Clock() while True: clock.tick(60) #60fpe screen.blit(backImg,(0,0)) #スプライトを更新 python1.update() python2.update() python3.update() #スプライトを描画 python1.draw(screen) python2.draw(screen) python3.draw(screen) pygame.display.update() #イベント処理 for event in pygame.event.get(): if event.type == QUIT: sys.exit() if event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit() if __name__ == '__main__': main()
spriteでは、以下の三つを定義(オーバーライド)する必要がある。
- self.image(スプライトの画像)
- self.rect(スプライトの位置とサイズを表すRect)
- update(スプライトの1フレームでの更新処理)