2

如何找到坐标变化的颜色被识别后需要点击的位置。

程序的目的是完成游戏中的任务,需要点击不同的颜色,这些颜色并不总是在相同的位置。

代码当前在执行程序 5 秒后获取鼠标坐标的颜色


public class RobotColorClick 
{

    public RobotColorClick () throws AWTException, IOException, InterruptedException 
    {
        Robot robot = new Robot();

        //Delay 5 seconds
        robot.delay(5000);        

        //Gets color (value of red,green,blue) from the mouse position after 5 seconds 
        Color color = robot.getPixelColor( MouseInfo.getPointerInfo().getLocation().x 
                , MouseInfo.getPointerInfo().getLocation().y);

        //Delay 3 seconds
        robot.delay(3000);

        //Mouse moves to X and Y then right click
        //Problem! How to set X and Y to position color coordinates, position will change
        robot.mouseMove(x, y);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);

    }


    public static void main(String[] args) throws AWTException, IOException, 
                InterruptedException 
    {
        new RobotColorClick ();
    }
}
4

2 回答 2

1

您很可能需要拍摄一个屏幕截图图像,然后从原始位置螺旋出来(假设“颜色”是一条连续的路径而不是四处跳动),将该像素的颜色与您正在寻找的颜色进行比较。一旦确定了,mouseMove(newX, newY)然后执行mousePress()/mouseRelease()方法。

于 2013-03-28T16:41:12.457 回答
1

如果颜色正在继续路径而不是跳跃, 请阅读 Kevin Mangold 的答案,否则如果它只是出现在任何地方的颜色,我认为你有 2 个选项(如果背景是恒定颜色):

第一个: 您可以对其进行屏幕截图迭代并获取任何出现颜色(或特定颜色)的坐标,然后使用 Robot lib 按下它,这可能会有所帮助 ,并且可以用于截取屏幕截图

第二个:如果您不想截屏,您可以使用机器人库通过 2 个嵌套的 for 循环遍历所有屏幕像素来遍历您的屏幕,这可能会有所帮助

如果背景图像不是恒定的,您可以截取屏幕截图并将其与上一个进行比较,使用机器人库来按下差异。

额外我之前在某处阅读过使用机器人库按下按钮时,最好这样做 robot.mousePress(InputEvent.BUTTON1_MASK); robot.delay(1); robot.mouseRelease(InputEvent.BUTTON1_MASK); 而不是这样做

robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

额外的东西,你可以从你的软件中读取游戏内存并获得你想要的颜色坐标

于 2019-08-18T19:26:04.070 回答