PythonライブラリPygameを用いてウィンドウ(画面)に主人公と背景画像を描画する方法とソースコードを解説します。
Pygameで画像の描画
Pygameではpygame.image.load()メソッドで画像を読み込み、screen.blit()メソッドで読み込んだ画像を画面に貼り付けることができます。
今回は以下のように背景画像とプレイヤー画像を読み込んでゲーム画面に表示される方法を解説します。
【今回使用した画像】
背景:background.png
プレイヤー:player.png
動画解説版
本ページの内容は以下動画でも解説しています。
サンプルコード
先程の実行結果のサンプルコードは以下のとおりです。
コードの解説
上記のサンプルコードについて解説します。
1. インポートと初期設定
import sys
import pygame
from pygame.locals import *
pygame
モジュールとそのローカル定数をインポートします。sys
モジュールをインポートして、プログラムの終了処理に使用します。
2. 画面サイズと画像ファイルパスの設定
SCREEN_SIZE = (600, 378)
PLAYER_IMG_PATH = "/Users/github/sample/python/pygame/tutorial/player.png"
BACKGROUND_IMG_PATH = "/Users/github/sample/python/pygame/tutorial/background.png"
- SCREEN_SIZEで画面サイズを設定します。
- PLAYER_IMG_PATHとBACKGROUND_IMG_PATHでプレイヤーと背景の画像ファイルの絶対パスを指定します。
3. メイン関数の定義
def main():
pygame.init()
pygame.display.set_mode(SCREEN_SIZE)
screen = pygame.display.get_surface()
pygame.init()
でPygameを初期化します。pygame.display.set_mode(SCREEN_SIZE)
でウィンドウを作成し、画面サイズを設定します。pygame.display.get_surface()
は、作成されたディスプレイサーフェス(ウィンドウの描画対象)を取得します。サーフェス(Surface)は、画像やテキストなどのグラフィック要素を描画するための基本的なオブジェクトです。サーフェスは、ピクセルデータの集合体で、ゲームのグラフィック要素を構成するためのキャンバスのようなものです。
4. 画像の読み込みと初期位置の設定
bg = pygame.image.load(BACKGROUND_IMG_PATH).convert_alpha()
rect_bg = bg.get_rect()
player = pygame.image.load(PLAYER_IMG_PATH).convert_alpha()
rect_player = player.get_rect()
rect_player.center = (330, 300)
pygame.image.load()
で画像を読み込み、convert_alpha()
で透明度を保持します。get_rect()
で画像の矩形(位置とサイズ)を取得します。初期位置は (0,0) になります。- rect_player.centerでプレイヤー画像の中心位置を(330, 300)に設定します。
5. メインループ
while True:
pygame.display.update()
pygame.time.wait(30)
screen.fill((0, 0, 0, 0))
screen.blit(bg, rect_bg)
screen.blit(player, rect_player)
pygame.display.update()
で画面を更新します。pygame.time.wait(30)
で30ミリ秒待機します。screen.fill((0, 0, 0, 0))
で画面を真っ黒に塗りつぶしてクリアします。screen.blit()
で背景とプレイヤー画像を描画します。先に背景画像を描画することで、キャラクター画像は背景の上に描画されます。
6. イベント処理
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
pygame.event.get()
でイベントを取得し、ループで処理します。- ウィンドウの閉じるボタンが押された場合や、Escキーが押された場合にプログラムを終了します。
7. プログラムのエントリーポイント
if __name__ == "__main__":
main()
スクリプトが直接実行された場合にmain()
関数を呼び出します。
関連ページ
Pygameの使い方については以下ページで解説しています。
【Pygame超入門】使い方とサンプルゲームを解説
Pygameで2Dゲームを簡単に制作する方法を入門者向けに解説します。
Python全般については以下ページで解説しています。
【Python超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
コメント
画像の読み込みがうまくいきません。名前が同じ画像ファイルを同じファイルの中に入れておきました。
コメントありがとうございます。
エラーメッセージで、ある程度原因がわかると思いますので(保存先の指定が間違っているか、そうでないか等)ご確認ください。