Как плавно перемещать мышь по экрану с помощью Java? - PullRequest
3 голосов
/ 22 февраля 2012

Существует метод mouseMove (), который заставляет указатель перейти в это место.Я хочу, чтобы мышь плавно двигалась по экрану.Мне нужно написать метод с именем mouseGLide (), который принимает начало x, начало y, конец x, конец y, общее время, которое должно пройти скольжение, и количество шагов, которые нужно выполнить во время скольжения.Он должен анимировать указатель мыши, перемещаясь от (начало x, начало y) к (конец x, начало y) за n шагов.Полное скольжение должно занять t миллисекунд.

Я не знаю, с чего начать Кто-нибудь может мне помочь начать это?Может кто-нибудь просто сказать мне, какие шаги мне нужно сделать, чтобы эта проблема работала.

Ответы [ 2 ]

23 голосов
/ 22 февраля 2012

Для начала давайте просто напишем пустой метод, параметры которого будут такими, как вы определили в своем вопросе.

public void mouseGlide(int x1, int y1, int x2, int y2, int t, int n) {

}

Далее, давайте создадим объект Robot, а также рассчитаем 3 элемента информации, которые 'Поможу вашим будущим расчетам.Не забудьте поймать исключение из создания экземпляра Robot.

Robot r = new Robot();
double dx = (x2 - x1) / ((double) n);
double dy = (y2 - y1) / ((double) n);
double dt = t / ((double) n);

dx представляет разницу в координате x вашей мыши каждый раз, когда она движется во время скольжения.В основном это общее расстояние перемещения, разделенное на n шагов.То же самое с dy за исключением координаты y.dt - это общее время скольжения, разделенное на n шагов.

Наконец, создайте цикл, который выполняется n раз, каждый раз перемещая мышь ближе к конечному местоположению (предпринимая шаги (dx,д)).Во время каждого выполнения заставляйте поток спать в течение dt миллисекунд.Чем больше ваш n, тем более плавным будет скольжение.


Окончательный результат:

public void mouseGlide(int x1, int y1, int x2, int y2, int t, int n) {
    try {
        Robot r = new Robot();
        double dx = (x2 - x1) / ((double) n);
        double dy = (y2 - y1) / ((double) n);
        double dt = t / ((double) n);
        for (int step = 1; step <= n; step++) {
            Thread.sleep((int) dt);
            r.mouseMove((int) (x1 + dx * step), (int) (y1 + dy * step));
        }
    } catch (AWTException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 11 января 2019

Для всех тех, кто боролся с программированием, как я делал раньше, вот как вы реализуете этот метод и используете его правильно:

    public class gliding_the_mouse {

    public void mouseGlide(int x1, int y1, int x2, int y2, int t, int n) {
try {
    Robot r = new Robot();
    double dx = (x2 - x1) / ((double) n);
    double dy = (y2 - y1) / ((double) n);
    double dt = t / ((double) n);
    for (int step = 1; step <= n; step++) {
        Thread.sleep((int) dt);
        r.mouseMove((int) (x1 + dx * step), (int) (y1 + dy * step));
    }
} catch (AWTException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
} }    
public static void main (String[] args) { // program initialization
gliding_the_mouse x = new gliding_the_mouse(); // we declare what are we gonna use

x.mouseGlide(400,500,700,700,5000,10000); // the smaller the time value, the faster the mouse glides. 

} } // P.s I am new to StackOverflow, so I am not particular experienced with it, sorry for ugly design
...