【问题标题】:Java Robot mouse move: setting speed?Java机器人鼠标移动:设置速度?
【发布时间】:2011-07-17 09:29:25
【问题描述】:

Java Robot 类允许人们像移动实际的物理鼠标一样移动鼠标。

但是,如何以人道的方式(因此不是即时的)将鼠标从 Point1 移动到 Point2?又名,如何设置移动速度?

如果 Robot 类无法实现这样的速度,那么如果鼠标只能瞬间移动,那么应该使用什么样的“算法”来模拟人类的鼠标移动?是否应该以一定的增量速度逐个像素地移动鼠标?

【问题讨论】:

    标签: java performance mouse velocity awtrobot


    【解决方案1】:

    这里有一个很好的方法:

    考虑start_x 您的鼠标从哪里开始,end_x 您希望它在哪里结束。 y也一样

    for (int i=0; i<100; i++){  
        int mov_x = ((end_x * i)/100) + (start_x*(100-i)/100);
        int mov_y = ((end_y * i)/100) + (start_y*(100-i)/100);
        robot.mouseMove(mov_x,mov_y);
        robot.delay(10);
    }
    

    希望对您有所帮助...

    【讨论】:

    • 将除法移出括号使其更快,也更精确。上面写的算法从 (1, 1) 移动到 (1, 1) 到 (0, 0)。还有一个问题:它只完成了 99%。
    • 延迟功能不再可用..答案需要更新
    【解决方案2】:

    Robot 类有一个 delay(...) 方法,您可以使用它来控制点到点的移动。尝试几种不同的算法来确定你喜欢什么。

    【讨论】:

    • 延迟方法使机器人休眠。这将如何减慢鼠标的移动速度?或者你的意思是我应该创建自己的算法,以一定的增量逐个像素地移动鼠标?
    • 是的,您需要创建一个循环,将鼠标移动一个(或两个)像素,然后在移动到下一个像素之前延迟。这就是为什么您可以创建自己的算法。您确定要移动多少像素以及延迟多长时间等。
    • 这并没有回答什么样的算法会是人道的。
    • 您希望我们做什么?我不是什么是“人道”的专家。这就是为什么我建议你自己尝试一些算法来看看你喜欢什么:) 如果你愿意,你甚至可以发布代码,这样人们就可以用不同的算法尝试你的代码,人们可以投票决定他们喜欢什么。
    【解决方案3】:

    重写 Geoff 的答案以便于理解:

    for (int i=0; i<=100; i++){
       int mov_x = start_x + (end_x - start_x) * i/100;
       int mov_y = start_y + (end_y - start_y) * i/100;
       robot.mouseMove(mov_x,mov_y);
       robot.delay(10);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2016-05-23
      相关资源
      最近更新 更多