目標:
- pygame で画像を読み込みSpriteクラスで使用する
プロジェクトストラクチャー
- project/ -- 全てを入れるフォルダ(ディレクトリ)
- img/ -- 画像を保存するフォルダ(ディレクトリ)
- player.png
- app.py -- codeを書くファイル
- img/ -- 画像を保存するフォルダ(ディレクトリ)
インポートをしましょう
import pygame
import os
- この
osというモジュールは、自分が使っているコンピューターの情報を得るためのfunctionがたくさん入っているもの。今回はこのファイルへのパスを得るために使う。
# フォルダへのパスを変数に格納しよう
game_dir = os.path.dirname(__file__)
img_dir = os.path.join(game_dir, "img")
os.path.dirname
= osモジュールの中のpathモジュールの中のdirnameというfunctionを呼び出す。
__file__というのは実行されているファイル名が格納されている。
この場合だったら、app.py。
これでgame_dirという変数に実行されているファイル(app.py)が含まれているフォルダ(direrctoryname)が格納される
この場合: project
そのgame_dirを早速使おう。
img_dir = os.path.join(game_dir, "img")
= osモジュールの中のpathモジュールの中のjoinというfunctionを呼び出す
joinfunctionは受けった引数を一つのパスへとつなげる
この場合: project/img/
次に、画像ファイルをpygameに読み込もう
player_img = pygame.image.load(
os.path.join(img_folder, "player.png")).convert()
pygame.image.load().convert()
= 画像を読み込み(load())、pygameが扱いやすいように変換する(convert())。それをplayer_img変数に格納する。
次に、作ったplayer_imgをPlayerクラスで使用しよう
以下がPlayerクラス
class Player(pygame.sprite.Sprite):
# sprite for the Player
def __init__(self):
super().__init__()
self.image = pygame.transform.scale(player_img, (50, 38))
self.image.set_colorkey((0,0,0))
self.rect = self.image.get_rect()
ここに注目は
self.image = pygame.transform.scale(player_img, (50, 38))
ここではtransformモジュールにあるscale()functionを使用する
scale([Surface], [サイズ])の引数
- どのSurfaceに書くのか
- どの大きさにするのか(ピクセル)*Tupleで渡す
self.image.set_colorkey((0,0,0))
= 画像の周囲にある無駄な外縁を消すためのfunction
ここでは周囲の黒を消す (0,0,0)
self.rect = self.image.get_rect()
= 新しく作った画像を格納した属性self.imageのRectをget_rect()functionを使って、別の属性self.rect属性に格納しておく。
次に、Playerクラスのインスタンスを作ろう
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
all_sprites = pygame.sprite.Group()
= all_sprites変数にpygame.sprite.Group()を格納
Group()ではSpriteクラスのものをグループでまとめることができる。
これにより、全てのSpriteにupdatefunctionを実行したりできるので便利。
player = Player()
= Player()インスタンスをplayerに格納する
all_sprites.add(player)
all_sprites変数に新しく作ったplayerインスタンスを入れる
ゲームループの中でPlayerクラスを描く
all_sprites.draw(screen)
= screenサーフェス(ゲーム画面)にall_spritesに含まれるSprite をdraw()する