下面的这个方法试图将 Sprite 移动到“ block ”迷宫中,我需要它每隔一段“步骤”等待一次,然后再次移动并重新绘制,但这种方法只会导致这个家伙永远需要移动,然后传送到需要的目的地。
我的 sleep 方法有什么问题吗?
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 值与 Sprite 的 X 或 Y 值相同,我将无法移动。经过一个小时的工作,主要问题不只是定时器,还有我的比较器错误,共同努力做出了完美的问题。
关于java - Thread.sleep 似乎非常不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48453128/