程序如何同时允许多个键盘输入?

How have a program allow multiple keyboard inputs simultaneously?

我正在写一个简单的游戏,基本上有两个人控制精灵和战斗。我用一个关键的监听器编写了这个程序,但这只允许我在任何给定时间控制一个精灵。除了 KeyListener,我愿意使用不同的键盘输入方法,尽管我更愿意坚持使用 KeyListener。我听说过 KeyBindings,但我真的不知道如何使用它们。我有一个想法是多线程,但我对这个概念不太满意。这是我的代码:(请举例说明我的代码应该是什么。另外,第二个精灵是用一个单独的 class 控制的,它与这个几乎相同,只是使用了不同的键。)

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;

public class KeyHandler implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_UP) {
            Display.up = Display.up + 7;
        }

        if (key == KeyEvent.VK_DOWN) {
            Display.down = Display.down + 7;
        }

        if (key == KeyEvent.VK_RIGHT) {
            Display.right = Display.right + 7;
        }

        if (key == KeyEvent.VK_LEFT) {
            Display.left = Display.left + 7;
        }

        if (key == KeyEvent.VK_SPACE) {
            Display.fireMissile();
            Display.whichSpriteInt = 0;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
}

Currently its not controlling an object, its just painting a buffered image then changing the coordinates with the key input

因此,您在生成 KeyEvent 时执行操作。

键绑定的工作方式没有什么不同。您将 Action 映射到 KeyStroke。它不会改变您编写代码的方式,只会改变您处理事件的方式。

查看 Motion Using the Keyboard。前两个示例(一个使用 KeyListener,另一个使用 Key Binding)演示了这个概念。两个 class 都定义了一个相同的 move(...) 方法,唯一的区别是如何调用该方法。

I could change the format but it would require a lot of code reworking and I'd prefer to avoid it.

现在是学习如何改进 structure/design 程序的最佳时机。 Swing 是围绕创建动作的概念设计的,因此可以通过键盘或鼠标调用动作。

话说你真的很想看看KeyboardAnimation.java例子。 class 完全符合您的要求。它使用 Timer 来制作动画,并允许不同的 KeyStrokes 移动不同的对象。