gpt4 book ai didi

java - 在java中处理两个按键

转载 作者:行者123 更新时间:2023-12-01 18:27:37 32 4
gpt4 key购买 nike

我的代码有问题,因为我不知道当您同时按向上箭头和向左箭头等时如何使图片对角移动。这是我的代码:

 public void keyPressed(KeyEvent ke) {
switch (ke.getKeyCode()) {
case KeyEvent.VK_RIGHT: {
cordX += 5;
}
break;
case KeyEvent.VK_LEFT: {
cordX -= 5;
}
break;
case KeyEvent.VK_DOWN: {
cordY += 5;
}
break;
case KeyEvent.VK_UP: {
cordY -= 3;
}
break;
}
repaint();
}

不知道这样行不行

case KeyEvent.VK_UP  &&  KeyEvent.VK_LEFT: {
cordY += 5;
}
break;

最佳答案

如果您使用 Swing 组件,请使用键绑定(bind) API,请参阅 How to Use Key Bindings ,它将解决一系列问题...

无论如何,解决方案(基本上)是相同的,您需要做的是定义一系列标志,这些标志定义当前按下的键,并定期更新受这些标志影响的变量的状态

private boolean down, up, left, right;
//...

public void keyPressed(KeyEvent ke) {
switch (ke.getKeyCode()) {
case KeyEvent.VK_RIGHT:
right = true;
break;
case KeyEvent.VK_LEFT:
left = true;
break;
case KeyEvent.VK_DOWN:
down = true;
break;
case KeyEvent.VK_UP:
up = true;
break;
}
updateState();
}

public void keyReleased(KeyEvent ke) {
switch (ke.getKeyCode()) {
case KeyEvent.VK_RIGHT:
right = false;
break;
case KeyEvent.VK_LEFT:
left = false;
break;
case KeyEvent.VK_DOWN:
down = false;
break;
case KeyEvent.VK_UP:
up = false;
break;
}
updateState();
}

protected void updateState() {
if (right) {
cordX += 5;
} else if (left) {
cordX -= 5;
}
if (down) {
cordY += 5;
} else if (up) {
cordY -= 3;
}
repaint();
}

然后,您可以使用 javax.swing.Timer 安排定期回调,该回调可用于调用 updateState (而不是从按键事件中调用它)处理程序)。

看看How to use Swing Timers了解更多详情...

关于java - 在java中处理两个按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25526689/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com