2

私は次のようにしました:

...
if (Gdx.input.isKeyPressed(Keys.SPACE)) {
   shoot();
}
...

問題は、SPACE キーを押し続けると、多数の弾丸が作成されることです。私が望むのは、キーを押している間ではなく、スペースを押したときにのみ弾丸が発射されることです。

4

2 に答える 2

7

LibgdxInputProcessorインターフェイスには、受け取るメソッドkeyDownkeyUpイベントがあります。これはおそらくあなたが使うべきものです。

于 2013-07-03T19:06:04.357 に答える
4

ライブラリのドキュメントを調べたところ、キーを押す (特にキーを押す/離す) 他の方法は公開されていないようです。spaceAlreadyPressedこのような場合、フレーム間で持続する変数を使用して、キープの変更を自分で追跡できます。

...
boolean spaceIsPressed = Gdx.input.isKeyPressed(Keys.SPACE);
if (spaceIsPressed && !spaceAlreadyPressed) {
   shoot();
}
...
spaceAlreadyPressed = spaceIsPressed;

spaceIsPressed入力状態が予期せず変化する場合に備えて、変数を使用する方が安全な場合があります。


または、短くしたい場合は、論理法則を使用して次のように減らすことができます。canShootフレーム間でも持続し、初期値はfalseです。

...
canShoot = !canShoot && Gdx.input.isKeyPressed(Keys.SPACE);
if (canShoot) {
   shoot();
}
...
于 2013-07-03T18:56:25.643 に答える