[英]How to stop object from moving while key is still pressed
我是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);
}
这使对象可以自由移动。 但是,只要按下UP箭头,它显然就会继续移动。
有什么办法可以使对象说-5一次就移动,然后即使仍然按下该键也要停止吗?
我不确定是否需要更改move方法或KeyListener方法来执行此操作。
我希望我对所要问的问题已经足够清楚了,对我提出的任何建议,我将深表感谢。
最简单的方法是添加一个布尔值,以指示按下了移动键
类成员: boolean movingKeyPressed = false
在按下的键中:
if (movingKeyPressed) {
return;
} else {
// do stuff
movingKeyPressed = true;
}
在关键释放方法中:
movingKeyPressed = false;
首先:如果您从诸如keyPressed
或keyReleased
之类的侦听器中调用类方法,则应该使用Synchronization-那是因为可以从多个线程调用侦听器方法,因此您的类方法( player.setDy()
)可以(并且将)被并行调用-您需要确保每次调用setDy
都在下一个调用之前进行。
另外: keyTyped
在许多情况下要好得多: https : keyTyped
一个示例可能如下所示:
public void keyTyped(KeyEvent arg0) {
if(arg0.getKeyCode() == KeyEvent.VK_UP)
{
synchronized(player)
{
player.setDy(-5);
}
}
}
这将顺序可靠地调用setDy
。 现在您需要做的就是确保setDy
可以按预期工作,因此仅设置一次位置
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.