Pygameのスプライト機能を用いて、複数の画像オブジェクトを効率よく管理する方法とソースコードを解説します。
【1】スプライトの基本的な使い方
Pygameのスプライトは、ゲーム内のグラフィカルな要素(プレイヤーや敵など)を管理するための非常に便利な機能です。スプライトを使用することで、例えば以下のように複数のゲームオブジェクトの描画、更新、衝突判定などを効率的に管理できます。
【今回使用する画像】
Pygameでスプライトを扱うには、以下のようにpygame.sprite.Spriteクラスを継承します。
import pygame
class Player(pygame.sprite.Sprite):
def __init__(self, image_path, pos):
super().__init__()
self.image = pygame.image.load(image_path).convert_alpha()
self.rect = self.image.get_rect(topleft=pos)
# update()`メソッドを使用して、オブジェクトの状態を更新します。
# 通常、位置の変更やアニメーションの更新などを行います。
def update(self):
# ここに更新ロジックを追加
# オブジェクトの画像を画面上に描画
screen.blit(self.image, self.rect)
動画解説版
【1-1】サンプルコード①
サンプルプログラムのソースコードです。5人の女の子が動き回ります。
【1-2】サンプルコード①の解説
このコードは、Pygameを使ってスプライト(画像)を画面上で動かすシンプルなプログラムです。以下に各部分の詳細な解説を行います。
インポートと初期設定
# -*- coding: utf-8 -*-
import sys
import pygame
from pygame.locals import *
- sysモジュールをインポートしています。
pygameモジュールとそのローカル定数をインポートしています。
画面サイズと画像ファイルパスの設定
SCREEN = Rect(0, 0, 600, 400) # 画面サイズ
GIRL1_IMG_PATH = "/Users/github/sample/python/pygame/sprite/girl1.png"
GIRL2_IMG_PATH = "/Users/github/sample/python/pygame/sprite/girl2.png"
GIRL3_IMG_PATH = "/Users/github/sample/python/pygame/sprite/girl3.png"
GIRL4_IMG_PATH = "/Users/github/sample/python/pygame/sprite/girl4.png"
GIRL5_IMG_PATH = "/Users/github/sample/python/pygame/sprite/girl5.png"
SCREENは画面のサイズを設定するための矩形オブジェクトです。- 各スプライト画像のファイルパスを定義しています。
クラスの定義と初期化(スプライト)
Pygameを使ってスプライト(画像オブジェクト)を管理するクラス Girl を定義しています。
class Girl(pygame.sprite.Sprite):
def __init__(self, filepath, pos, vxy, angle=0):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(filepath).convert_alpha()
if angle != 0:
self.image = pygame.transform.rotate(self.image, angle)
Girlクラスはpygame.sprite.Spriteを継承しています。これにより、Pygameのスプライト機能を利用できます。__init__メソッドは、スプライトの初期化を行います。filepathは画像ファイルのパスです。posはスプライトの初期位置(x, y)です。vxyはスプライトの移動速度(vx, vy)です。angleはスプライトの回転角度です(デフォルトは0)。
self.imageに画像を読み込み、必要に応じて回転させます。


コメント
11行目のところが構文が違うと返されます。
※匿名様
コメントありがとうございます。
Python3だとエラーが出るようなので修正いたしました。
変更ありがとうございます。
変更したあとのものを実行すると下のエラーが起きます。
‘Sprite’ object has no attribute ‘img’
これはpyhotn3にはないのでしょうか?
※匿名様
コメントありがとうございます。
当方の環境でも同様のエラーが出ましたので修正致しました。