この記事では、Python言語とPygameのキーイベント処理を用いて、矢印キーにより物体を動かす方法とソースコードを解説します。
pygame.event.get
Python用ゲームモジュール「Pygame」のキーイベント処理機能「pygame.event.get()」を用いて、矢印キーで物体を動かしてみました。
処理手順
プログラムの処理の流れは下記の通りです。
①「pygame」モジュールをインポートする。
②画面のサイズを設定する。
③円の中心座標を画面の中心に設定する。
④Pygameを初期化する。[pygame.init]
⑤画面(ウィンドウ)を生成する。[pygame.display.set_mode]
⑥画面を更新する。(円と直線)
⑦更新時間の間隔を設定する。
⑧画面の背景色を黒に設定する。
⑨円の中心座標が画面の範囲外にある場合は、画面端の座標に設定する。
⑩円を描画する。
⑪イベント処理をする。
・画面の閉じるボタンが押されたら終了する。
・矢印キーが押されたらその方向に円の中心座標を+1移動する。
⑫6-11の処理を繰り返す。
ソースコード
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import pygame from pygame.locals import * import sys def main(): (w,h) = (400,400) # 画面サイズ (x,y) = (w/2, h/2) pygame.init() # pygame初期化 pygame.display.set_mode((w, h), 0, 32) # 画面設定 screen = pygame.display.get_surface() while (1): pygame.display.update() # 画面更新 pygame.time.wait(30) # 更新時間間隔 screen.fill((0, 20, 0, 0)) # 画面の背景色 # 円の中心座標が画面の範囲外にある場合 if x < 0: x = 0 if x > w: x = w if y < 0: y = 0 if y > h: y = h # 円を描画 pygame.draw.circle(screen, (0, 200, 0), (x, y), 5) # イベント処理 for event in pygame.event.get(): # 画面の閉じるボタンを押したとき if event.type == QUIT: pygame.quit() sys.exit() # キーを押したとき if event.type == KEYDOWN: # ESCキーなら終了 if event.key == K_ESCAPE: pygame.quit() sys.exit() # 矢印キーなら円の中心座標を矢印の方向に移動 if event.key == K_LEFT: x -= 1 if event.key == K_RIGHT: x += 1 if event.key == K_UP: y -= 1 if event.key == K_DOWN: y += 1 if __name__ == "__main__": main()
実行結果
サンプルプログラムの実行結果です。
矢印キーで円を動かすことができました。
【おすすめ関連記事】
・Pygameでゲームプログラミング
・Python入門 基本文法
コメント
pygame.draw.circle(screen, (0, 200, 0), (x, y), 5)
でエラーが発生しました。
エラータイプが
TypeError: integer argument expected, got float
ということだったので、調べてみたら、変数がfloatタイプになっている可能性があるものでした。
初期表示位置の(x,y) = (w/2, h/2)を整数計算させる
(x,y) = (w//2, h//2) にしたら正常に動きました。
お困りの方がいるかもしれないので、コメントに残させていただきました。
21歳の学生です。
pygameに関する書籍を買う余裕がなく数時間悩んでいたのですが、理解することができました。
本当に助かりました。
ありがとうございました。