人工知能に関する断創録スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。Learning、Kerasに関する記事が多いです。2008-05-10キーイベントPygameゲームの入力インタフェースとしてキーボードとマウスは欠かせません。マウスに関してはマウスイベント(2008/5/6)で紹介しました。ここでは、キーボードの入力を検出する方法を紹介します。Pygameでキーボード入力を検出する方法は、マウスと同じく主に2つあります。1つめは、イベントハンドラでキーイベントを捕捉する方法、2つめは、pygame.keyモジュールの関数を使ってキー入力を検出する方法です。ゲームでは2つめの方法を使うのが一般的ですが、キーを押した、離したの瞬間を検出したい場合はイベントハンドラ方式が役立ちます。キーを押すとスクリプトが終了する矢印キーを押すと画像が移動するサンプルを作ります。vy)1つめの方法は、イベントハンドラでキーイベントを検出する方法です。今までイベントハンドラではQUITイベントが来たときにスクリプトを終了していただけでしたが、他にもさまざまなイベントを捕捉できます。キーボードに関連するイベントは下の2つです。イベント発生するタイミングパラメータKEYDOWNキーが押されたときkeyKEYUPキーが離されたときkeyKEYDOWNは、キーが押されたときに発生します。「押された」がポイントでキーを押した瞬間に1回だけ発生します。1回KEYDOWNイベントが発生した後にキーを長押ししていても発生しません。1度離す必要があります。KEYUPは、キーを押した後、離したときに発生します。これも「離したとき」がポイントでキーを離した瞬間に1回だけ発生します。キーを押してない間中ずっと発生しているわけではありません。どのイベントが発生したのかはEventオブジェクトのtypeで判断できます。typeがKEYDOWNの場合だけ処理してます。各Eventオブジェクトはtypeの他にkeyというパラメータを持っています。keyはどのキーが押されたか/離されたかを表す定数が格納されます。ESCキーが押されたならKEY_ESC、↑キーが押されたならKEY_UPが入ってます。上のサンプルでは、ESCキーが押されたときスクリプトを終了し、矢印キーが押されたとき絵が移動するようにしています。絵を移動させる方法は画像の移動(2008/5/9)を参照してください。ちなみにKEY_ESCAPE、KEY_UP、KEY_LEFTなどのどのキーが押された/離されたかを表す定数はpygame.localsで定義されてます。importしたので使えるわけです。どんな定数があるかはpygame.keyに一覧が載っています。数字キー、アルファベットキー、ファンクションキーなどもちゃんと定義されています。サンプルスクリプト1を実行してみるとわかりますが、キーを押し続けても画像は移動し続けません。キーを押している間ずっと移動を続けるようにしたい場合は、pygame.keyモジュールを使います。vy)2つめの方法は、pygame.keyの関数を使う方法です。pygame.key.get_pressed()関数を使うとどのキーが押されているかを知ることができます。この関数は、キーを押した/離したの瞬間の検出ではなく、関数を呼び出したときにどのキーが押されているかを検出する目的で使います。戻り値は、どのキーが押されているかを表すタプルです。ESCキーが押されているか知りたい場合は、KEY_ESCの位置を調べます。サンプルでは、get_pressed()の戻り値であるタプルをpressed_keysに格納して、pressed_keys[KEY_ESC]を調べています。この値が0のとき押されていない、1のとき押されていることを意味します。使い分け2つのスクリプトの実行結果を比べてみるとわかりますが、イベントハンドラを使った場合では、キーを押した瞬間に1度だけ移動し、キーを押し続けても移動しません。pygame.keyを使った場合はキーを押しっぱなしにすると移動を続けます。キーを押した/離したの瞬間を検出したい場合はイベントハンドラ、キーが押された状態かを検出したい場合はpygame.keyを使うとよいと思います。RPGでコマンドウィンドウのメニューを選択したい、タイピングゲームを作りたい場合はイベントハンドラ方式がよさそうです。pygame.key方式がよさそうです。»プロフィールid:aidiary人工知能とその関連分野に興味があります。Blog|ブログを報告する。