java “While”循环在方法调用[已关闭]后未继续

8yparm6h  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(108)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
7天前关闭。
Improve this question
我正在为F2P游戏Moorhuhn构建一个像素aimbot。

private Point findDuck(BufferedImage screenshot) {
    int redThreshold = 230;
    int greenThreshold = 0;
    int blueThreshold = 0;

    duckLocation = new Point(-1, -1);

    while (duckLocation.x == -1 && duckLocation.y == -1 && andereRichtung == false) {
        richtungAendern();
        if (duckLocation.x == -1 && duckLocation.y == -1 && andereRichtung == true) {
            moveMouseToLeft();
            andereRichtung = false;
        }
        for (int y = 0; y < screenshot.getHeight(); y++) {
            for (int x = 0; x < screenshot.getWidth(); x++) {
                int pixel = screenshot.getRGB(x, y);
                int red = (pixel >> 16) & 0xff;
                int green = (pixel >> 8) & 0xff;
                int blue = pixel & 0xff;
                if (red >= redThreshold && red <= 235 && green >= greenThreshold && green <= 0
                        && blue >= blueThreshold && blue <= 0) {
                    duckLocation = new Point(x, y);
                    break;
                }
            }
        }

        if (duckLocation.x == -1 && duckLocation.y == -1) {
            robot.mouseMove(1700, 255);

            screenshot = robot.createScreenCapture(screenBounds);
        }
    }
    return duckLocation;
}

如果我的findDuck方法在当前屏幕上没有找到鸭子,它会将鼠标移到右侧,转到另一个视图,在那里找到鸭子。问题是,大约10秒钟后,它已经射完了路上所有的鸭子,并停留在右侧。这就是为什么我添加了一个调度任务方法:

private void richtungAendern() {
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    scheduler.schedule(new Runnable() {
        public void run() {
            andereRichtung = true;
        }
    }, 10, TimeUnit.SECONDS);
}

它只是将布尔值andereRichtung更改为true,当它为true时,findDuck()中的if语句执行moveMouseToLeft()方法

private void moveMouseToLeft() {
    for (int i = 1; i <= 15; i++) {
        robot.mouseMove(235, 255);
    }
}

使鼠标回到游戏画面的左边,执行moveMouseToLeft()后,我添加了andereRichtung = false;之后,所以循环继续寻找鸭子并射击它们但这里是我的主要问题:鼠标现在卡在屏幕左上角,射击空气而不是继续寻找鸭子。
我不明白为什么在moveMouseToLeft()命令之后循环不继续。
下面是一个简短的视频我的问题:* 一个五个 *

vawmfj5a

vawmfj5a1#

您在主while循环的每次迭代中都调用了richtungAendern();方法。因此,您可能每秒多次启动同一个预定执行器,所以在第一个执行器触发后,其余执行器基本上会一直被触发。因此,难怪您无法离开左上角。:)您可以在richtungAendern()方法中放置一个断点(或System.out.println)来验证这一点。
要解决这个问题,我建议不要使用调度程序,而只是保留一个变量,告诉你的鼠标是在左边还是右边,并在它们之间移动,而不是robot.mouseMove(1700, 255);命令。

相关问题