我正在制作一个相当基本的自上而下的 2D 射击游戏(想想 Space Invaders),但我遇到了 KeyEvent 每秒处理太多事件的问题。
我有这个:
if (e.getKeyCode() == KeyEvent.VK_SPACE){
shoot();
}
shoot() 创建一个子弹并让它向上发射,但是如果你只是按住空格来发射数百颗子弹,就会出现问题,使游戏变得微不足道。
有没有办法让它每秒只处理一个或两个按键,而忽略其余的?
我正在制作一个相当基本的自上而下的 2D 射击游戏(想想 Space Invaders),但我遇到了 KeyEvent 每秒处理太多事件的问题。
我有这个:
if (e.getKeyCode() == KeyEvent.VK_SPACE){
shoot();
}
shoot() 创建一个子弹并让它向上发射,但是如果你只是按住空格来发射数百颗子弹,就会出现问题,使游戏变得微不足道。
有没有办法让它每秒只处理一个或两个按键,而忽略其余的?
您可以使用手工制作的计时器,使其既轻巧又易于定制,例如:
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;
}
}
}
在那种类型的游戏中,屏幕上一次只允许一个子弹不是通常吗?在当前子弹击中某物或从屏幕顶部消失之前,不要进行射击。