Java 如何同时响应两个不同的按键事件?
所以我基本上是用java创建一个platformer游戏。这里有一个简单的问题。我可以同时响应两个不同的按键事件吗?例如,我按下向右箭头键,我的播放器向右移动。现在,我想让我的球员跳起来,但继续向右移动。为此,我需要同时响应两个不同的KeyEvent。我如何做到这一点?我还没有尝试过任何代码,因为我不知道从哪里开始。提前感谢您的回答。您可以使用单独的“KeyDown”和“keydup”事件,为您的播放器设置状态值Java 如何同时响应两个不同的按键事件?,java,game-physics,keylistener,keyevent,game-development,Java,Game Physics,Keylistener,Keyevent,Game Development,所以我基本上是用java创建一个platformer游戏。这里有一个简单的问题。我可以同时响应两个不同的按键事件吗?例如,我按下向右箭头键,我的播放器向右移动。现在,我想让我的球员跳起来,但继续向右移动。为此,我需要同时响应两个不同的KeyEvent。我如何做到这一点?我还没有尝试过任何代码,因为我不知道从哪里开始。提前感谢您的回答。您可以使用单独的“KeyDown”和“keydup”事件,为您的播放器设置状态值 public class KeyboardListener extends JFr
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();
}
}
你的玩家需要一个状态机
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事件处理程序,并将当前播放器状态(如行走、跳跃、向左行走、向右行走等)保存为布尔值
在主循环中,您可以检查玩家处于何种状态,并更改其坐标。比如:
if(player.left) { player.x += speed } //etc.
您可以使用单独的“按键向下”和“按键向上”事件,并为您的播放器设置状态值
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();
}
}
你的玩家需要一个状态机
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事件处理程序,并将当前播放器状态(如行走、跳跃、向左行走、向右行走等)保存为布尔值
在主循环中,您可以检查玩家处于何种状态,并更改其坐标。比如:
if(player.left) { player.x += speed } //etc.
您可能希望使用线程,然后将按键添加到播放器物理类的列表中
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();
...
}
根据需要添加任意数量的线程。您可能希望使用线程,然后将按键添加到播放器物理类的列表中
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();
...
}
根据需要添加尽可能多的线程。取决于您使用的框架,例如AWT、Swing或JavaFX。很抱歉,我告诉您,“我还没有尝试过任何代码”是这个网站上的预告句。。。另外,你应该在这里发布这样的问题:取决于你正在使用的框架,例如AWT、Swing或JavaFX。我很抱歉地告诉你,“我还没有尝试过任何代码”是这个网站上被禁止的句子。。。此外,您应该在此处发布类似的问题: