【问题标题】:How to restrict KeyEvent capture speed如何限制 KeyEvent 捕获速度
【发布时间】:2013-01-19 12:07:14
【问题描述】:

我正在制作一个相当基本的自上而下的 2D 射击游戏(想想 Space Invaders),但我遇到了 KeyEvent 每秒处理太多事件的问题。

我有这个:

if (e.getKeyCode() == KeyEvent.VK_SPACE){
    shoot();
}

shoot() 创建一个子弹并让它向上发射,但是如果你只是按住空格发射数百发子弹,就会出现问题,让游戏变得微不足道。

有没有办法让它每秒只处理一到两次按键,而忽略其余的?

【问题讨论】:

    标签: java awt keylistener keyevent


    【解决方案1】:

    您可以使用手工制作的计时器,使其既轻便又易于定制,例如:

    long lastShoot = System.currentTimeMillis();
    final long threshold = 500; // 500msec = half second
    
    public void keyPressed(KeyEvent e) { 
      if (e.getKeyCode() == KeyEvent.VK_SPACE)
      {
         long now = System.currentTimeMillis();
         if (now - lastShoot > threshold)
         {
           shoot();
           lastShoot = now;
         }
      }
    }
    

    【讨论】:

    • 他说的是每秒 2 次射击,我认为 nanoTime() 在这种情况下不会有太大的不同。
    • 我在想一些类似的东西,但出于某种原因,我认为它会复杂得多。是的,我不需要超精确的计时,所以毫秒就可以了。非常感谢。
    【解决方案2】:

    在那种类型的游戏中,屏幕上一次只允许一个子弹不是通常吗?在当前子弹击中某物或从屏幕顶部消失之前,请勿进行射击。

    【讨论】:

    • 传统上是的,但在这个游戏中还有更多内容需要稍微更高的射速。
    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多