1. ホーム
  2. スクリプト・コラム
  3. パイソン

PygameのEventモジュールの詳細な例

2022-02-02 19:22:34

マウスクリック、キーボードヒット、ゲームウィンドウの移動、ウィンドウのサイズ変更、特定のプロットの起動、ゲームの終了など、これらは "イベント"としてみなすことができ、Pygamesはユーザーが生成したアクション(またはイベント)を受け入れるPygameは、いつでも生成可能で大小にかかわらず、ユーザーが生成したものを受け入れる。

イベントの種類

Pygameはイベントを処理するための特別な構造、イベントキューを定義しています。これはキューに関する"first come, first served"の基本原則に従い、ユーザーのアクション(トリガーイベント)を順序よく、1つずつ処理できるようにするものです。次の表は、Pygameで一般的なゲームイベントの一覧です。

<テーブル イベントの種類 説明 メンバー属性 QUIT ユーザーがウィンドウの閉じるボタンを押した場合 なし ATIVEEVENT Pygameが起動または非表示になっている ゲイン,状態 キーダウン キーボードが押された ユニコード、キー、モッド キーアップ キーボードリリース キー, mod マウスモーション マウスの動き   pos, rel, ボタン マウスボタンダウン マウスが押された  pos, ボタン マウスブツトンポイントアップ マウスリリース  pos, ボタン JOYAXISMOTION ジョイスティックまたはパッドの動き  ジョイ、軸、値 JOYBALLMOTION  ジョイボール動作   ジョイ、軸、値 JOYHATMOTION ジョイスティックモバイル     ジョイ、軸、値 JOYBUTTONDOWN ゲームパッドが押された ジョイ、ボタン JOYBUTTONUP ゲームパッド解除     ジョイ、ボタン ビデオサイズ Pygameのウィンドウのスケーリング   サイズ、幅、高さ VIDEOEXPOSE Pygameウィンドウの一部を公開する(expose)  なし USEREVENT ユーザーイベントのトリガー   イベントコード

なお、ゲーム開発にPygameを使用する場合、上記の事象がすべて当てはまるわけではないので、例を挙げながらどのように学ぶかが重要です。

イベント処理方法

Pygame.eventモジュールは、次の表に示すように、イベントキューを処理するための一般的なメソッドを提供します。

<テーブル メソッド 説明 pygame.event.get() イベントキューからイベントを取得し、キューから削除します。 pygame.event.wait()  イベントが発生するまでブロックし、イベントが発生しない場合はブロックしたままとなる pygame.event.set_blocked()を実行します。  どのイベントがキューに入るのをブロックするかを制御します。パラメータが None の場合、すべてのイベントがブロックされます。 pygame.event.set_allowed()を実行します。   キューで許可されるイベントを制御します。 pygame.event.pump()  このメソッドが呼び出されると、Pygameは自動的にイベントキューを処理します。 pygame.event.poll()  は、実際の状況に応じて、実際のイベント、または None を返します。 pygame.event.peek()を実行します。   特定のタイプのイベントがキューにあるかどうかを検出する pygame.event.clear() キューからすべてのイベントをクリアする pygame.event.get_blocked()を実行します。  特定のタイプのイベントがキューに入ることを禁止されているかどうかをテストします。 pygame.event.post()   新しいイベントをキューに入れる pygame.event.Event()   新しいユーザー定義イベントを作成する

Pygameを使ってイベントを処理する場合、ロジックは概ね同じようなものになります。まずイベントの種類を判断し、イベントのアクションに応じて異なるゲームアクションを実行します。ですから、この状況はif ... elseステートメントを使うのに最適なのです。以下に示すように

# Take 500 users for testing
cust = data[:500]
km = KMeans(n_clusters=4)
km.fit(cust)
pre = km.predict(cust)


マウスイベントとキーボードイベントに適用される上記の各メソッドについて、以下に簡単に説明します。

キーボードイベントの処理

キーボードイベントは、ゲームの上下左右やキャラクターの前進後退など、多くのキー操作を伴うことがありますが、いずれもキーボードを操作する必要があります。

keyboardイベントにはキーボードのキーを取得できるkeyプロパティが用意されており、Pygameではキーボードのキーをアルファベットキー、数字キー、組合せキーなどの定数として定義しています。次の表は、一般的なキーの定数の一覧です。

<テーブル 定数名 説明 K_BACKSPACE バックスペース(Backspace) K_TAB 集計キー(Tab) K_CLEAR クリアキー(Clear) K_RETURN エンターキー(Enter) K_PAUSE 一時停止ボタン(ポーズ) K_ESCAPE 終了キー(Escape) K_SPACE スペースキー(Space) K_0... .K_9 0... .9 K_a... .Kz a. .z K_DELETE Deleteキー(削除) k_kp0... .k_kp9 0(キーパッド)... .9(キーパッド) K_F1... .K_F15 F1... .F15 K_UP 上向き矢印 K_DOWN 下矢印 K_RIGHT 右矢印 K_LEFT 左矢印 KMOD_ALT Altキー同時押し

キー定数についてもっと知りたい方は、公式ドキュメントを参照してください。 クリックで移動します .

ここでは、"画像移動"の例で、キーボードイベントがどのように処理されるか、次のように見てみましょう。

silhouette_score(cust, pre)


プログラムを実行すると、次のような結果が得られます。

図1:Pygameのキーボードイベント - 画像の移動

マウスイベントの処理

マウスはパソコンにとって最も重要な外部機器の一つであり、ゲーマーにとって欠かせないツールの一つでもあります。

PygameはMOUSEMOTION、MOUSEBUTTONDOWN、MOUSEBUTTONUPという3つのマウスイベントを提供しており、それぞれ異なるメンバのプロパティに対応したイベントタイプを持っています。以下に示すように

pygame.event.MOUSEMOTION マウス移動イベント

    event.pos ウィンドウの左上隅を基準としたマウスの現在の座標値(x,y)です。
    event.rel マウスの相対移動距離(x,y)、最後のイベントからの相対移動距離。
    event.buttons マウスのボタンの初期状態 (0,0,0) は、(左ボタン、ホイール、右ボタン)に対応し、移動中にそのボタンをクリックすると、対応する位置が 1 に変更されます。

Pygame.event.MOUSEBUTTONUP マウスボタン解放イベント

    event.pos ウィンドウの左上隅を基準としたマウス座標の現在値 (x,y)
    event.button マウスリリースキー番号(整数) 左ボタンが1、スクロールホイールを押すのが2、右ボタンが3

pygame.event.MOUSEBUTTONDOWN マウスボタン押下イベント

    event.pos ウィンドウの左上隅を基準としたマウスの現在値(x,y)
    event.button マウスの押したキー番号(整数)、左ボタンが1、押したスクロールホイール2、右ボタンが3、スクロールホイール4が前進、スクロールホイール5が後進

マウスイベントについては、以下のサンプルコードで簡単な例を示しています。

プログラムは次のように実行されます。

図2: Pygameのマウスイベント - マウスの移動

Pygame Eventモジュールの詳細な例についての記事は以上です。Pygame Eventの詳細については、Script Houseの過去の記事を検索するか、以下の関連記事を引き続き参照してください。