スプライト2

前回のスプライトのプログラムは, 画像をそれぞれ更新, 描写をしなくてはいけないのでグループとしてまとめます.

import pygame
from pygame.locals import *
import sys

SCR_RECT = Rect(0, 0, 1000, 700)

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()
        colorkey = self.image.get_at((0,0))  # 左上の色を透明色に
        self.image.set_colorkey(colorkey, RLEACCEL)
        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("スプライトグループの使い方")

    # スプライトを作成
    python1 = MySprite("kappa3.png", 0, 0, 3, 6)
    python2 = MySprite("kappa3.png", 10, 10, 5, 5)
    python3 = MySprite("kappa3.png", 320, 240, -2, 3)

    # スプライトグループを作成してスプライトを追加
    group = pygame.sprite.RenderUpdates()
    group.add(python1)
    group.add(python2)
    group.add(python3)

    clock = pygame.time.Clock()

    while True:
        clock.tick(60)  # 60fps
        backImg = pygame.image.load("hakusuiko.jpg").convert()
        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 __name__ == "__main__":
    main()

グループ化によってMySprteのdraw()関数を省略することができます.
スプライトのグループ化は用途によっていくつかの種類があります.
pygame.sprite.Groupは衝突判定に使われます.今回は行わないので使いません.
pygame.sprite.RenderUpdatesはスプライトの更新と描写を行います.
今回はこれを使用します.