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.
}

问题是空格键的一次物理命中一次会触发不止一次。如何确保每台印刷机只触发一次?

4

2 回答 2

2

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

于 2013-03-25T13:10:29.427 回答
1

目前,您的代码可能正在执行“按下空格时拍摄”之类的操作。你想要的是“如果按下空间但之前没有按下框架则按下”。

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

于 2013-03-25T13:06:10.063 回答