我是Java编程和初学者我正在制作一个应用程序,要求一个对象在一个充满方块的网格中移动。
对象应该一次只移动一个方格,如果用户想要移动到另一个方格,他们必须再次按下该键。我的移动方法如下:
public void move() {
x += dx;
y += dy;
}
我正在使用KeyListener接口来实现keyPressed,keyTyped和keyReleased方法,我的条件类似于KeyPressed下面片段中的那个
//KeyPressed
int c = e.getKeyCode();
if (c == KeyEvent.VK_UP) {
player.setDy(-5);
}
这允许对象自由移动。但是,只要按下向上箭头,它就会明显继续移动。
有没有办法让对象向上移动一次-5,然后即使仍按下按键也会停止?
我不确定是否需要更改我的move方法或KeyListener方法来执行此操作。
我希望我已经清楚了解我的要求,并且我非常感谢任何指示。
答案 0 :(得分:0)
最简单的方法是添加一个布尔值来表示按下移动键
班级成员:boolean movingKeyPressed = false
按下键:
if (movingKeyPressed) {
return;
} else {
// do stuff
movingKeyPressed = true;
}
密钥发布方法中的:
movingKeyPressed = false;
答案 1 :(得分:0)
首先:如果从 另外: 示例可能如下所示: 这会顺序可靠地调用keyPressed
或keyReleased
等侦听器中调用类方法,则应使用Synchronization - 这是因为可以从多个线程调用侦听器方法您的类方法(player.setDy()
)可以(并且将会)并行调用 - 您需要确保每次调用setDy
在之前发生。< / p>
keyTyped
在许多情况下要好得多:https://stackoverflow.com/a/7071810/351861 public void keyTyped(KeyEvent arg0) {
if(arg0.getKeyCode() == KeyEvent.VK_UP)
{
synchronized(player)
{
player.setDy(-5);
}
}
}
setDy
。现在您需要做的就是确保setDy
按预期工作,因此只设置位置一次