【Pygame】マウスクリックでプレイヤー移動

この記事では、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_WIDTHSCREEN_HEIGHTは、ゲーム画面の幅と高さを定義しています。
  • PLAYER_IMG_PATHBACKGROUND_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 == MOUSEBUTTONDOWN and event.button == 1:
        player_rect.center = event.pos
    if event.type == QUIT:
        running = False
    if event.type == KEYDOWN:
        if event.key == K_ESCAPE:
            running = False
  • MOUSEBUTTONDOWN and event.button == 1イベントは、マウスクリック かつ 左クリックされた時に発生します。event.posに左クリックした画面上の位置が格納されていおり、player_rect.center(プレイヤーの中心位置)に渡しています。中央クリック(ホイールクリック)ならevent.button == 2、右クリックでならevent.button == 3にします。
  • QUITイベントでウィンドウを閉じるとwhile文を抜けてプログラムを終了します。
  • KEYDOWNイベントでキーが押されたときの処理を行います。Escキーが押されたらwhile文を抜けてプログラムを終了します。

Pygameとプログラムの実行を終了

    pygame.quit()
    sys.exit()
  • while文を抜けたら、この部分でPygameとプログラムの実行を終了します。

プログラムのエントリーポイント

if __name__ == "__main__":
    main()
  • この部分で、スクリプトが直接実行された場合にmain()関数を呼び出します。

関連ページ

Pygameの使い方については以下ページで解説しています。

【Pygame超入門】使い方とサンプルゲームを解説
Pygameで2Dゲームを簡単に制作する方法を入門者向けに解説します。

Python全般については以下ページで解説しています。

【Python超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。

コメント