Java KeyListeners / KeyBinding - Clear Buffer - Java游戏开发

时间:2011-08-27 05:03:39

标签: java keyboard

我正在开发Java游戏,而且我遇到了KeyListeners / KeyBinding问题。我基本上想要做的是暂时禁用键盘/在动画发生时不允许更多输入。此动画是通过更新数据生成的。

我目前得到的是我按下动画的按键,动画开始,我按下另一个执行其他功能的按键。它会被添加到keyboardlistener的堆栈/队列(?)中,并在第一个动画完成时触发。

我正在使用实现KeyListener的JPanel。

了解代码:

    public void keyPressed(KeyEvent arg0) {
      //Prevents Repeated keys
      pressed.add(arg0);
      if (pressed.size() == 1) {
            int key = ((KeyEvent) pressed.toArray()[0]).getKeyCode();
            if (key == KeyEvent.VK_ENTER) {
                doSomeAnimation();
            } else if (key == KeyEvent.VK_SPACE) {
                doADifferentAnimation();
            } 
            Update();
     }
}

我尝试过的事情:

1)在调用动画之前,在JPanel上设置focusable(false)。然后设置focusable(true)并在完成后抓住焦点。

2)使用布尔值来跟踪动画发生的时间。

3)使用键绑定。

无论我使用什么方法,我总是遇到问题,即在动画发生时我还会从键盘输入。然后,一旦完成该动画,它将转到堆栈/队列(?)中的下一个元素并处理它。此外,这些动画需要不止一次出现(因此使用布尔数组来验证它是否已经执行已经不会有用)。

所以,如果你有任何想法或帮助(或指向我的地方),我将不胜感激。

一些额外信息:Java 1.6,IDE Eclipse,MVC结构。 (这个问题是控制器/模型)

1 个答案:

答案 0 :(得分:1)

假设您的动画是由javax.swing.Timer的实例驱动的,则有问题的队列是EventQueuegameTimer的“排队顺序”运行事件。因为阻止主机平台上的其他设备唤起您的监听器是不切实际的,您必须跟踪应用程序中的效果。作为一个具体的例子,这个example有几个模型move()方法的重载来处理来自不同来源的输入:键盘,鼠标或动画计时器。可以打开或关闭计时器以查看其效果。使用自定义实现取代EventQueue的{​​{3}}也可以提供一些见解。