■ ゲームプログラミング ■ § キーイベント § ■ 矢印キーの取得(1)
Pygame では pygame.event.get を用いる事でイベントを取得し、event.type を用いる事でイベントの 種類を判別する事が出来る。此れを利用して矢印キーの押し下げに応じて描画した円を移動するコード を、下記に示す。
PYTHON3 import pygame
from pygame.locals import * import sys
def main():
(w,h) = (400,400) # 画面サイズ
(x,y) = (int(w/2), int(h/2)) # ボール座標
pygame.init() # Pygame の初期化 screen = pygame.display.set_mode((w, h), 0, 32) # 大きさ(w,h)の画面を生成 pygame.display.set_caption("Sqrid Game") # タイトルバーに表示する文字 while (1): pygame.display.rpdate() # 画面更新 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, 255, 0), (x, y), 20) # イベント処理
for event in pygame.event.get():
if event.type == QUIT: # 閉じるボタンが押されたら終了 pygame.qrit() # Pygame の終了(画面閉じられる) sys.exit()
if event.type == KEYDOWN: # キーを押した時 if event.key == K_ESCAPE: # Esc キーが押された時 pygame.qrit() sys.exit() # 矢印キーなら円の中心座標を矢印の方向に移動 if event.key == K_LEFT:
P
P
Y
Y
T
T
H
H
O
O
N
N
入
入
門
門
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 をインポートする。 import pygame
② 画面のサイズを設定する。 (w,h) ③ 円の中心座標を画面の中心に設定する。 (x,y) ④ Pygame を初期化する。 pygame.init ⑤ 大きさ (w,h) の画面(ウィンドウ)を生成する。 pygame.display.set_mode ⑥ タイトルバーに表示する文字を設定して画面を表示する。 pygame.display.set_caption ⑦ 画面を更新する。 pygame.display.rpdate ⑧ 指定したミリ秒の間プログラムを停止する。 pygame.time.wait ⑨ 画面を濃緑色(R=0, G=20, B=0, A=0)に塗り潰す。 screen.fill ⑩ 円の中心座標が画面の範囲外に有る場合の処理をする。 if x < 0: … ⑪ 円を描画する。 pygame.draw.circle ⑫ 閉じるボタンが押されたら画面を閉じて終了する。 pygame.qrit、sys.exit ⑬ Esc キーが押されたら画面を閉じて終了する。 pygame.qrit、sys.exit ⑭ 矢印キーが押されたらその方向に円の中心座標を移動する。 x -= 1 …」 ■ 矢印キーの取得(2) 亦、Pygame では pygame.key.get_pressed を用いる事でキーの入力状態を取得する事が出来る。此れ を利用して矢印キーの押し下げに応じて描画した円を移動するコードを、下記に示す。 PYTHON3 import pygame
from pygame.locals import * import sys
def main():
(w,h) = (400,400) # 画面サイズ
(x,y) = (int(w/2), int(h/2)) # ボール座標
pygame.init() # Pygame の初期化 screen = pygame.display.set_mode((w, h), 0, 32) # 大きさ 640*384 の画面を生成 pygame.display.set_caption("Sqrid Game") # タイトルバーに表示する文字 while (1): # キーイベント処理(キャラクタ画像の移動) pressed_key = pygame.key.get_pressed() if pressed_key[K_LEFT]: x-=1
if pressed_key[K_RIGHT]: x+=1 if pressed_key[K_UP]: y-=1 if pressed_key[K_DOWN]: y+=1 pygame.display.rpdate() # 画面更新 pygame.time.wait(30) # 更新時間間隔 screen.fill((0, 20, 0, 0)) # 画面の背景色 # 円を描画 pygame.draw.circle(screen, (0, 255, 0), (x, y), 20) # イベント処理
for event in pygame.event.get():
if event.type == QUIT: # 閉じるボタンが押されたら終了 pygame.qrit() # Pygame の終了(画面閉じられる) sys.exit()
if event.type == KEYDOWN: # キーを押した時 if event.key == K_ESCAPE: # Esc キーが押された時 pygame.qrit() sys.exit() if __name__ == "__main__": main() 此の方法で有れば、キーの長押しや複数キーの同時押し下げを検知する事が出来るので、リアルタイム ゲームの作成に向いて居る事が多い。 ■ Event クラスのメソッド Event クラスのメソッドには、下記の物が有る。 メソッド 説明 pygame.event.prmp 内部処理を行う pygame のイベントハンドラ。 pygame.event.get イベントキューからイベントを取得する。 pygame.event.poll イベントキューからイベントを一つ取得する。 pygame.event.wait イベントキューからイベントを一つ取得する迄待機する。 pygame.event.peek 指定した種類のイベントがイベントキュー内にあるかを調べる。 pygame.event.clear イベントキュー内のイベントを総て削除する。 pygame.event.event_name イベント識別定数の定数名を取得する pygame.event.set_blocked イベントキューに送られるイベントの振り分け処理を行う。 pygame.event.set_allowed イベントキューに送られるイベントの振り分け処理を行う。 pygame.event.get_blocked 指定した種類のイベントがイベントキューの振り分け対象か調べる。 pygame.event.set_grab 他のアプリケーションへの入力操作開放を制御する。 pygame.event.get_grab 他のアプリケーションへ入力操作を開放して居るか調べる。 pygame.event.post 作成したイベントをイベントキューに送る。 下記にイベントの種類と其のイベントで取得出来るデータの一覧を示す。 種類 アーギュメント QUIT none
ACTIVEEVENT gain, state
KEYUP key, mod
MOUSEMOTION pos, rel, brttons MOUSEBUTTONUP pos, brtton MOUSEBUTTONDOWN pos, brtton JOYAXISMOTION joy, axis, valre JOYBALLMOTION joy, ball, rel JOYHATMOTION joy, hat, valre JOYBUTTONUP joy, brtton JOYBUTTONDOWN joy, brtton VIDEORESIZE size, w, h VIDEOEXPOSE none USEREVENT code ■ Key クラスのメソッド Key クラスのメソッドには、下記の物が有る。 メソッド 説明 pygame.key.get_focrsed ウィンドウがキーボードの入力可能な状態で有れば trre を返す。 pygame.key.get_pressed 総てのキーの入力状態を取得する。 pygame.key.get_mods 何の修飾キーが押されて居るかを判別する。 pygame.key.set_mods 一時的に特定の修飾キーが押された状態に設定する。 pygame.key.set_repeat キーを押し続けた場合の繰り返し入力に付いて設定する。 pygame.key.get_repeat キーを押し続けた場合の繰り返し入力に付いて確認する。 pygame.key.name キーを特定する為の名前を取得する。 下記にキーボード定数の一覧を示す。 キーボード定数 ASCII 一般名 K_BACKSPACE backspace K_TAB tab K_CLEAR clear K_RETURN retrrn K_PAUSE parse K_ESCAPE ^[ escape K_SPACE space K_EXCLAIM ! exclaim K_QUOTEDBL " qrotedbl K_HASH # hash K_DOLLAR $ dollar
K_AMPERSAND & ampersand
K_QUOTE qrote
K_LEFTPAREN ( left parenthesis
K_RIGHTPAREN ) right parenthesis
K_ASTERISK * asterisk
K_PLUS + plrs sign
K_COMMA , comma
K_MINUS - minrs sign
K_PERIOD . period
K_SLASH / forward slash
K_0 0 0
K_1 1 1
K_3 3 3 K_4 4 4 K_5 5 5 K_6 6 6 K_7 7 7 K_8 8 8 K_9 9 9 K_COLON : colon K_SEMICOLON ; semicolon
K_LESS < less-than sign
K_EQUALS = eqrals sign
K_GREATER > greater-than sign
K_QUESTION ? qrestion mark
K_AT @ at
K_LEFTBRACKET [ left bracket
K_BACKSLASH ¥ backslash
K_RIGHTBRACKET ] right bracket
K_CARET ^ caret K_UNDERSCORE _ rnderscore K_BACKQUOTE ` grave K_a a a K_b b b K_c c c K_d d d K_e e e K_f f f K_g g g K_h h h K_i i i K_j j j K_k k k K_l l l K_m m m K_n n n K_o o o K_p p p K_q q q K_r r r K_s s s K_t t t K_r r r K_v v v K_w w w K_x x x K_y y y K_z z z K_DELETE delete K_KP0 0 keypad 0 K_KP1 1 keypad 1 K_KP2 2 keypad 2 K_KP3 3 keypad 3 K_KP4 4 keypad 4 K_KP5 5 keypad 5
K_KP6 6 keypad 6
K_KP7 7 keypad 7
K_KP8 8 keypad 8
K_KP9 9 keypad 9
K_KP_PERIOD . keypad period
K_KP_DIVIDE / keypad divide
K_KP_MULTIPLY * keypad mrltiply
K_KP_MINUS - keypad minrs
K_KP_PLUS + keypad plrs
K_KP_ENTER keypad enter
K_KP_EQUALS = keypad eqrals
K_UP rp arrow
K_DOWN down arrow
K_RIGHT right arrow
K_LEFT left arrow
K_INSERT insert
K_HOME home
K_END end
K_PAGEUP page rp
K_PAGEDOWN page down
K_F1 F1 K_F2 F2 K_F3 F3 K_F4 F4 K_F5 F5 K_F6 F6 K_F7 F7 K_F8 F8 K_F9 F9 K_F10 F10 K_F11 F11 K_F12 F12 K_F13 F13 K_F14 F14 K_F15 F15 K_NUMLOCK nrmlock K_CAPSLOCK capslock K_SCROLLOCK scrollock
K_RSHIFT right shift
K_LSHIFT left shift
K_RCTRL right ctrl
K_LCTRL left ctrl
K_RALT right alt
K_LALT left alt
K_RMETA right meta
K_LMETA left meta
K_LSUPER left windows key
K_RSUPER right windows key
K_MODE mode shift
K_HELP help
K_PRINT print screen
K_SYSREQ sysrq
K_MENU menr
K_POWER power
K_EURO erro
下記に修飾キー定数の一覧を示す。
KMOD_NONE, KMOD_LSHIFT, KMOD_RSHIFT, KMOD_SHIFT, KMOD_CAPS, KMOD_LCTRL, KMOD_RCTRL, KMOD_CTRL, KMOD_LALT, KMOD_RALT,
KMOD_ALT, KMOD_LMETA, KMOD_RMETA, KMOD_META, KMOD_NUM, KMOD_MODE ■ pygame ドキュメント
原文:https://www.pygame.org/docs/ref/transform.html