java - Thread.sleep 似乎非常不一致

标签 java animation sleep

下面的这个方法试图将 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/

相关文章:

java - 处理 onClick 和双击

jquery - CSS3 - 仅使用 jquery 缩放框阴影

r - 使用 ggplot 和 gganiminate 制作动画条形图

android - 告知 Android 设备何时处于 sleep 模式

c++ - 为什么 sleep() 会阻塞 std::ostream

java - 运算符和方法有什么区别?

java - 这是java泛型吗?这怎么可能工作?

java - Spring:从@Value 参数创建 LocalDate 或 LocalDateTime

javascript - 为什么这个基本的 anime.js 不起作用?

c++ - 在 C++ 中每 10 毫秒执行一次函数