所以我基本上是用Java创建一个平台游戏。这是一个简单的问题。我可以同时响应两个不同的KeyEvent吗?例如,我按向右箭头键,而播放器向右移动。现在,我希望播放器跳起来,但继续向右移动。为此,我需要同时响应两个不同的KeyEvent。我该如何实现?我还没有尝试过任何代码,因为我不知道从哪里开始。谢谢您的提前答复。
答案 0 :(得分:0)
您可以使用单独的“ KeyDown”和“ KeyUp”事件并为播放器设置状态值。
您需要为玩家配备一台状态机。
public class KeyboardListener extends JFrame implements KeyListener {
public KeyboardListener() {
addKeyListener(this);
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("Right key pressed");
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("Left key pressed");
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("Right key Released");
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("Left key Released");
}
}
public static void main(String[] args) {
new KeyboardListener();
}
}
使用KeyListener接口中的keyPressed和keyReleased-EventHandlers并将您当前的玩家状态(例如,走路,跳跃,walk_left,walk_right等)保存为布尔值。
在主循环中,您可以检查播放器处于什么状态并更改其坐标。喜欢:
if(player.left) { player.x += speed } //etc.
答案 1 :(得分:-1)
您可能想使用“线程”,然后将按下的键添加到播放器物理类的列表。
public class KeysListener implements KeyListener
...
//FIRST THREAD
new Thread(new Runnable() {
@Override
public void run() {
public void keyEvent(KeyEvent e) {
int key = e.getKeyCode();
//TODO ADD KEY TO A LIST IN THE CLASS THAT HANDLES YOUR PHYSYICS
}
}
}).start();
//SECOND THREAD
new Thread(new Runnable() {
@Override
public void run() {
public void keyEvent(KeyEvent e) {
int key = e.getKeyCode();
//TODO ADD KEY TO A LIST IN THE CLASS THAT HANDLES YOUR PHYSICS
}
}
}).start();
...
}
添加与所需的并发键数一样多的线程。