
[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('スペースが押されたよ'); });