Pygameの勉強 *スプライトグループを使おうの巻*
スプライトグループを使うと複数のスプライトをまとめて管理、更新、描画することができる。
#! /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 main(): pygame.init() screen = pygame.display.set_mode(SCR_RECT.size) pygame.display.set_caption('Sprite group') 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,-4,3) #スプライトグループを作成してスプライトを追加 group = pygame.sprite.RenderUpdates() group.add(python1) group.add(python2) group.add(python3) clock = pygame.time.Clock() while True: clock.tick(60) screen.blit(backImg,(0,0)) #スプライトグループを更新 group.update() #スプライトグループを描画 group.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()