【Pygame】スプライトの使い方とグループ化による効率的な管理方法

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 に画像を読み込み、必要に応じて回転させます。
記事の監修者
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
PyGame

コメント

  1. 匿名 より:

    11行目のところが構文が違うと返されます。

    • 管理人 より:

      ※匿名様
      コメントありがとうございます。
      Python3だとエラーが出るようなので修正いたしました。

  2. 匿名 より:

    変更ありがとうございます。
    変更したあとのものを実行すると下のエラーが起きます。
    ‘Sprite’ object has no attribute ‘img’
    これはpyhotn3にはないのでしょうか?

    • 管理人 より:

      ※匿名様
      コメントありがとうございます。
      当方の環境でも同様のエラーが出ましたので修正致しました。