【问题标题】:Shoot button in game is triggering multiple times instead of once when hitting spacebar游戏中的射击按钮在按下空格键时触发多次而不是一次
【发布时间】:2013-03-25 12:42:27
【问题描述】:

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

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

【问题讨论】:

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

标签: c++ keypress game-physics


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多