0

非常にシンプルなスペースインベーダースタイルのゲームを作っています。現在、次のように、スペースバーに応答するように設定されたfireメソッドがあります。

case VK_SPACE:
     tank.Fire();
     break;

そして、画面外の弾丸を戦車の後ろに出現させてから上向きに発射する射撃方法。

void Tank::Fire() {
    //Moves bullets to behind tank.
    bullets[bulletCount].SetPos(Vector2D (tank_pos.x+20, tank_pos.y+20));

    //Sets their speed vector in motion.
    bullets[bulletCount].SetSpeed(Vector2D (0, -350));
    bulletCount++; //Increment the current bullet to be used.
}

問題は、スペースバーを1回叩くと、一度に複数回発射されることです。プレスごとに1回だけ発砲するようにするにはどうすればよいでしょうか。

4

2 に答える 2

2

キーボード入力をどのようにキャプチャしていますか?これがキーの状態をチェックしている単なるループであり、天気を表すブール値があるかどうか、これが新しいキーがダウンしているかどうかを確認している場合は、キーがもうダウンしていないことに気付いたらクリアします。OSの自動リピートが心配な場合は、デバウンスを調べます。基本的な考え方は、キーダウンイベントを取得した時間をキャプチャし、将来のキーダウンイベントが発生した時間と比較して、レート制限できるようにすることです。

于 2013-03-25T13:10:29.427 に答える
1

現在、あなたのコードはおそらく「スペースが押されている間に撃つ」のようなことをしているでしょう。必要なのは、「スペースが押されているが、前にフレームが押されていなかった場合に押す」です。

したがって、基本的には、フレームごとにスペースの状態を保存し、前にフレームが押されたかどうかを確認する必要があります。

于 2013-03-25T13:06:10.063 に答える