C++ 游戏中的射击按钮是多次触发的,而不是在点击空格键时触发一次

C++ 游戏中的射击按钮是多次触发的,而不是在点击空格键时触发一次,c++,keypress,game-physics,C++,Keypress,Game Physics,我正在制作一个非常简单的太空入侵者风格的游戏。目前,我有一个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+2

我正在制作一个非常简单的太空入侵者风格的游戏。目前,我有一个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.
}

问题是空格键的一次物理打击一次发射多个。如何确保每次按下时只触发一次?

目前,您的代码可能正在执行类似“按下空格时进行射击”的操作。您需要的是“如果按下空格,但之前未按下边框,请按”


因此,基本上,您必须在每帧之间保存空间的状态,并检查之前的帧是否按下了空间。

当前,您的代码可能正在执行类似“按下空间时拍摄”的操作。您需要的是“如果按下空格,但之前未按下边框,请按”


因此,基本上,你必须在每一帧之间保存空格的状态,并检查空格是否被按下。

你是如何捕获键盘输入的?如果这只是一个检查键状态是否有表示天气的布尔值的循环,则这是一个新键是否已关闭,然后在注意到该键不再关闭时清除它。如果你担心你的操作系统的自动重复,那么你想研究去抖动,基本的想法是你捕获你得到按键事件的时间,然后与未来按键事件发生的时间进行比较,这样你就可以对它们进行速率限制

您如何捕获键盘输入?如果这只是一个检查键状态是否有表示天气的布尔值的循环,则这是一个新键是否已关闭,然后在注意到该键不再关闭时清除它。如果你担心你的操作系统的自动重复,那么你想研究去抖动,基本的想法是你捕获你得到按键事件的时间,然后与未来按键事件发生的时间进行比较,这样你就可以对它们进行速率限制

检查是否为按键重复事件?检查是否为按键重复事件?