Java 如何检查按键是否连续按下?
我试过了,但没用 我必须在按键时运行动画 我的代码:Java 如何检查按键是否连续按下?,java,Java,我试过了,但没用 我必须在按键时运行动画 我的代码: 使用KEY\u RELEASED事件执行类似的操作应该可以: case KeyEvent.VK_RIGHT: if (KeyEvent.getID() == KeyEvent.KEY_PRESSED) bool = true; while(bool){ estado = ANDA0; posX += 10; if (KeyEvent.getID() =
使用
KEY\u RELEASED
事件执行类似的操作应该可以:
case KeyEvent.VK_RIGHT:
if (KeyEvent.getID() == KeyEvent.KEY_PRESSED)
bool = true;
while(bool){
estado = ANDA0;
posX += 10;
if (KeyEvent.getID() == KeyEvent.KEY_RELEASED)
bool = false;
}
estado = PARADO;
break;
while循环将完全覆盖GUI事件线程,防止任何操作发生,包括动画操作和关键点读取事件。相反,我建议您:
- 如果这是Swing而不是KeyListener,则使用
- 更改使用摆动计时器作为动画循环,而不是线程冻结
循环while(true)
- 在按键时(从键绑定),将状态更改为状态字段
- 在密钥释放时(再次从绑定中),恢复同一字段的状态
- 根据上面更改的状态字段的状态,确定动画循环中发生的情况李>
例如,请查看使用发布的
键\u
事件出于好奇,这是如何工作的?在我所知道的Java中,在事件处理线程中忙着等待一个事件会使程序冻结。@cHao我认为,因为他使用了一个开关盒
,该键已经被按下了。是的,但是在你得到一个键释放
事件之前,它必须被释放。这意味着你在等待一个新事件。我认为它将永远为false,因为你不返回,这意味着你正在占用事件处理线程,这意味着下一个事件将永远不会得到处理。这就是为什么我要问这个问题——这件事似乎很奇怪。不过,你还在忙着等待。您已经拥有的事件不会改变其类型。
case KeyEvent.VK_RIGHT:
if (KeyEvent.getID() == KeyEvent.KEY_PRESSED)
bool = true;
while(bool){
estado = ANDA0;
posX += 10;
if (KeyEvent.getID() == KeyEvent.KEY_RELEASED)
bool = false;
}
estado = PARADO;
break;