有一个mouseMove()方法可以使指针跳转到该位置。我希望能够让鼠标在整个屏幕上平滑移动。我需要编写一个名为mouseGLide()的方法,该方法采用起始x,起始y,结束x,结束y,滑行应采取的总时间以及滑行期间要进行的步骤数。它应该通过n步骤从(开始x,开始y)移动到(结束x,开始y)来为鼠标指针设置动画。总滑行应该花费t毫秒。
我不知道怎么开始有人可以帮助我开始这个吗?任何人都可以告诉我我需要采取哪些步骤来解决这个问题。
答案 0 :(得分:23)
首先,让我们写一个空方法,其中的参数与您在问题中定义的一样。
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,dy)步骤)。在每次执行期间使线程休眠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();
}
}
答案 1 :(得分:0)
对于像我以前一样一直在努力地进行编程的所有人员,这是实现此方法并正确使用它的方式:
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