GENTSUKI BLOG

[Phaser3]キー入力に関して解説

Published on: 2025-03-08

基本

Scene内からPhaser.Input.Keyboard.KeyboardPluginを使ってキーを登録し、Phaser.Input.Keyboard.Keyクラスのインスタンスを得る。

const space = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);

Phaser.Input.Keyboard.KeyboardPlugin**:**https://newdocs.phaser.io/docs/3.55.1/Phaser.Input.Keyboard.KeyboardPlugin

キーを登録する

一つずつ登録する-addKey()

// 下記三つは同じ結果になる // 例:spaceキーを登録する // 1つめ:エディタの補完が効く環境とかだと一番確実 const space = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE); // 2つめ:短くて見た目は良い。タイポに注意 const space = this.input.keyboard.addKey('SPACE'); // 3つめ:わざわざ調べて使うメリットはない const space = this.input.keyboard.addKey(32);

戻り値はPhaser.Input.Keyboard.Keyクラスのインスタンス。

キー一覧:https://newdocs.phaser.io/docs/3.55.1/Phaser.Input.Keyboard.KeyCodes

キーに対応する番号を調べたいならソースを見る:https://github.com/photonstorm/phaser/blob/v3.55.1/src/input/keyboard/keys/KeyCodes.js

まとめて登録する-addKeys()

// 下記二つは同じ結果になる // 例:WとSキーをまとめて登録する // 1つめ:エディタの補完が効く環境とかだと一番確実 const keys = this.input.keyboard.addKeys({ W: Phaser.Input.Keyboard.KeyCodes.W, S: Phaser.Input.Keyboard.KeyCodes.S }); // 2つめ:短くて見た目は良い。タイポに注意 const keys = this.input.keyboard.addKeys('W,S');

戻り値はオブジェクトで下記のような構造になる。

{ W: Phaser.Input.Keyboard.Keyクラスのインスタンス。, S: Phaser.Input.Keyboard.Keyクラスのインスタンス }

おまけ。カーソルキーをまとめて登録する。

// up, down, left, right, space, shiftをまとめて作成しオブジェクトで返してくれる this.input.keyboard.createCursorKeys();

名前に反してカーソルキーではないspaceとshiftまで含んでいるのが気になる……。

キー入力を受け取る

方法は主に三つ。

  • Phaser.Input.Keyboard.KeyのisDownプロパティ
  • Phaser.Input.Keyboard.KeyboardPluginのcheckDown()
  • Phaser.Input.KeyboardのJustDown()

どれも戻り値はboolean。

const space = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE); // spaceを押している間はずっとtrueが返る if (space.isDown) { console.log('スペースが押されているよ') } // 2つめ:第2引数に渡した間隔でキー入力を確認する if (this.input.keyboard.checkDown(space, 500)) { console.log('500ms毎に呼ばれる') } // 3つめ:長押し防止策。一度のキー入力に対して一度だけ確認する if (Phaser.Input.Keyboard.JustDown(space)) { console.log('一度スペースが押されたよ') }

isDown:https://newdocs.phaser.io/docs/3.55.1/Phaser.Input.Keyboard.Key#isDown

checkDown():https://newdocs.phaser.io/docs/3.54.0/Phaser.Input.Keyboard.KeyboardPlugin#checkDown

JustDown():https://newdocs.phaser.io/docs/3.54.0/Phaser.Input.Keyboard#JustDown

おまけ。イベントで呼び出す。状態に関わらない入力処理があるときとか、ループの中以外で使うときとかに有効。

const space = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE); space.on('down', () => { console.log('スペースが押されたよ'); });