首先,讓我們寫出一個空白方法,其中參數與您在問題中定義的相同。
public void mouseGlide(int x1, int y1, int x2, int y2, int t, int n) {
}
接下來,讓我們創建一個Robot對象,並計算3條信息,這將有助於您將來的計算。不要忘記從實例化機器人中捕捉異常。
Robot r = new Robot();
double dx = (x2 - x1)/((double) n);
double dy = (y2 - y1)/((double) n);
double dt = t/((double) n);
dx
代表你的鼠標的x差分座標每次它同時滑翔運動。基本上它是總移動距離分爲n
步驟。除了y座標外,與dy
一樣。 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();
}
}
謝謝您的回答!雖然它沒有被提問者接受,但它確實幫助了我:-)但是你基本上可以擺脫睡眠延遲,因爲如果反正有很多步驟它會變得非常慢。 – moeTi 2012-05-07 08:48:21
一個改進就是測量喚醒和移動需要多長時間,然後爲(dt - timeSinceLastMove)而不是總是使用dt睡眠(這需要在睡眠之前進行移動,並且可能從第0步開始)步驟1)。 – tucuxi 2012-08-03 07:43:43