Pygameを用いて、マウスポインタに追従するようにプレイヤーを動かす方法とソースコードを解説します。
マウスポインタに追従するようにプレイヤーを移動
Pygameではイベントハンドラ「pygame.event.get()」でマウスポインタの移動を判定できます。また、「event.pos」でマウスポインタの画面上の座標を取得できます。
今回、マウスポインタに追従するようにプレイヤーを動かします。
動画解説版
サンプルコード
サンプルプログラムのソースコードです。
コード解説
上記コードの各部分について解説をします。
インポートと定数の定義
import sys
import pygame
from pygame.locals import *
- プログラムの終了sys.exit()を行いたいので、
sys
モジュールをインポートします。 pygame
をインポートします。pygame.locals
からは、Pygameで使用する定数をインポートします。
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 378
PLAYER_IMG_PATH = "/Users/github/sample/python/pygame/tutorial/player.png"
BACKGROUND_IMG_PATH = "/Users/github/sample/python/pygame/tutorial/background.png"
SCREEN_WIDTH
とSCREEN_HEIGHT
は、ゲーム画面の幅と高さを定義しています。PLAYER_IMG_PATH
とBACKGROUND_IMG_PATH
は、プレイヤーと背景の画像ファイルのパスです。
メイン関数
def main():
pygame.init()
pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
screen = pygame.display.get_surface()
pygame.init()
は、Pygameの初期化を行います。pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
は、指定したサイズのウィンドウを作成します。pygame.display.get_surface()
は、描画対象のサーフェスを取得します。
画像の読み込みと初期設定
bg = pygame.image.load(BACKGROUND_IMG_PATH).convert_alpha()
bg_rect = bg.get_rect()
player = pygame.image.load(PLAYER_IMG_PATH).convert_alpha()
player_rect = player.get_rect()
player_rect.center = (330, 300)
pygame.image.load()
で画像を読み込み、convert_alpha()
で透明度を扱えるようにします。get_rect()
で画像の矩形(位置とサイズ)を取得します。player_rect.center
でプレイヤーの初期位置を設定します。
メインループ
running = True # ループ処理の実行を継続するフラグ
while running:
pygame.display.update()
pygame.time.wait(30)
screen.fill((0, 0, 0, 0))
pygame.display.update()
で画面を更新します。pygame.time.wait(30)
で30ミリ秒待機します。screen.fill((0, 0, 0, 0))
で画面をクリアします。
プレイヤーの範囲制限
# 左端のx座標が0より小さければ0にする
if player_rect.left < 0:
player_rect.left = 0
# 右端のx座標が画面の幅より大きければ画面左端までにする
if player_rect.right > SCREEN_WIDTH:
player_rect.right = SCREEN_WIDTH
# 上端のy座標が0より小さければ0にする
if player_rect.top < 0:
player_rect.top = 0
# 下端のy座標が画面の高さより大きければ画面下端までにする
if player_rect.bottom > SCREEN_HEIGHT:
player_rect.bottom = SCREEN_HEIGHT
- プレイヤーが画面外に出ないように、位置(中心座標)を制限しています。
画像の描画
screen.blit(bg, bg_rect)
screen.blit(player, player_rect)
screen.blit()
で背景とプレイヤーの画像をウィンドウに描画します。
イベント処理
for event in pygame.event.get():
if event.type == MOUSEMOTION:
player_rect.center = event.pos
if event.type == QUIT:
running = False
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
- 「if event.type == MOUSEMOTION:」のブロックで、マウスの動きに応じてプレイヤーの位置を更新します。 ←今回の重要ポイント
- ウィンドウの閉じるボタンやEscキーが押された場合にループを終了します。
Pygameとプログラムの実行を終了
pygame.quit()
sys.exit()
- while文を抜けたら、この部分でPygameとプログラムの実行を終了します。
プログラムのエントリーポイント
if __name__ == "__main__":
main()
- この部分で、スクリプトが直接実行された場合に
main()
関数を呼び出します。
関連ページ
Pygameの使い方については以下ページで解説しています。
【Pygame超入門】使い方とサンプルゲームを解説
Pygameで2Dゲームを簡単に制作する方法を入門者向けに解説します。
Python全般については以下ページで解説しています。
【Python超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
コメント