まず、質問で定義したとおりのパラメーターを持つ空のメソッドを書き出しましょう。
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
です。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();
}
}