Pythonゲームプログラミング #2 画像表示
gist消してしまったので
代わりにこのリポジトリを参考にしてください
#0 環境構築
#1 メインループ
#2 画像表示
#3 アニメーション
#4 キー入力
#5 サウンド
#6 衝突判定
#7 ステートマシン
#8 マップチップ
#9 スクロール
画像表示
pygameを使ったゲームプログラミングについて説明していきます。
- Windows10
- Python3.6.1
- pygame1.9.3
今回は画像を表示してみます。英語が苦でない方はpygame公式ドキュメントのTutorialを読んだほうが良いでしょう。
画像の読み込みと表示
まずは画像ファイルを適当に用意します。pngなどで透過情報を付けておくとpygameでも透過してくれます。
とりあえず1キャラクターにつき幅32ピクセル、高さ32ピクセルで描いてみました。これを前回作成したmain.pyと同じフォルダに保存します。
main.pyを書き換えて画像を表示するプログラムを実行してみます
こんな感じで星とキノコが動けばOKです
解説
8行目
img_char = pygame.image.load('test.png') # 画像ファイルの読み込み
画像ファイルを読み込むとSurfaceクラスのインスタンスが作成されます。Surfaceクラスはpygameで画像を扱うためのクラスです。Surfaceクラスについての詳しい説明はドキュメントを読んでみてください。
24行目
screen.blit(img_char, (0, 0)) # 画像全体を表示
screenの座標(0, 0)にimg_charの画像全体をコピーしています。screenもSurfaceクラスです。
25行目
screen.blit(img_char, (x, 100), (64, 0, 32, 32)) # 画像の一部を表示
screenの座標(x, 100)にimg_charの座標(64, 0)から幅32px高さ32px分だけコピーしています。
27~34行目
# 画像の一部を回転させて表示 temp = pygame.Surface((32, 32), pygame.SRCALPHA) temp.blit(img_char, (0, 0), (32, 0, 32, 32)) temp = pygame.transform.rotate(temp, a) # 回転すると画像サイズが変化するので手動で中央寄せ offset_x = (32 - temp.get_width()) / 2 offset_y = (32 - temp.get_height()) / 2 screen.blit(temp, (160 + offset_x, 200 + offset_y))
pygame.transform関数を使って回転する星を表示してみました。img_char全体を回転させてから必要な部分を切り出すのは難しいので↓
あらかじめ表示したい部分を切り抜いてから回転させます。
Surfaceを作成するときにpygame.SRCALPHAフラグを指定すると透過情報付きのSurfaceを作成することができます。また、pygame.transformの他の関数を使えば拡大縮小や反転も可能です。詳しくはドキュメントを読んでみてください。