Java Thread.sleep似乎非常不一致
下面的方法是尝试将一个精灵移动到一个“块”迷宫中,我需要它每隔一段时间等待每一步,然后再次移动并重新绘制,但这种方法只会导致这个家伙永远移动,然后传送到所需的目的地 我的睡眠方法有什么问题吗Java Thread.sleep似乎非常不一致,java,animation,sleep,Java,Animation,Sleep,下面的方法是尝试将一个精灵移动到一个“块”迷宫中,我需要它每隔一段时间等待每一步,然后再次移动并重新绘制,但这种方法只会导致这个家伙永远移动,然后传送到所需的目的地 我的睡眠方法有什么问题吗 public void rightClick() { while(select.x != mouseConverter(mouseX) && select.y != mouseConverter(mouseY)) { int[][] path = select.ai(
public void rightClick() {
while(select.x != mouseConverter(mouseX) && select.y != mouseConverter(mouseY)) {
int[][] path = select.ai().getPath(arena, mouseConverter(mouseX), mouseConverter(mouseY), blocked);
select.move(path[0][0], path[0][1]);
repaint();
try {
Thread.sleep(1000);
} catch(InterruptedException ex) {
System.out.println("Inturrupted");
Thread.currentThread().interrupt();
}
}
}
这可能需要大量的澄清,所以如果这非常令人困惑,请原谅我。好的,谢谢@VGR向我透露AWT/Swing的问题,尽管最后我认为这是我的一个比较错误。以下是更新的代码:
public void rightClick() {
TimerTask task;
task = new TimerTask() {
@Override
public void run() {
System.out.println("X: " + mouseConverter(mouseX) + " Y: " + mouseConverter(mouseY));
System.out.println("SX: " + select.x + " SY: " + select.y);
if (select.x != mouseConverter(mouseX) || select.y != mouseConverter(mouseY)) {
int[][] path = select.ai().getPath(arena, mouseConverter(mouseX), mouseConverter(mouseY), blocked);
select.move(path[0][0], path[0][1]);
repaint();
}
else {
cancel();
}
}
};
timer.schedule(task, 0, ANIMATION_DELAY);
}
在我更新了使用计时器的代码之后,我遇到了一个问题:如果X值或Y值与精灵的X值或Y值相同,我就无法移动。经过一个小时的工作,主要的问题不仅是计时器,还有我的比较器错误,我们共同努力,使问题变得完美。AWT/Swing是基于事件的。您不能在事件侦听器调用的任何方法中休眠,因为它会阻止整个用户界面的更新(或响应进一步的鼠标/键盘输入)。试着休息一下,而不是睡觉。