まず、質問で定義したパラメータが空の空のメソッドを書きましょう。
次に、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
ステップに分割したものです。
最後に、回実行するループを作成し、マウスを最終位置に近づける(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
洗練されたものは、いつもdtを使うのではなく、起床と移動の所要時間を測定してから(dt-timeSinceLastMove)寝ることです(これは、のステップ1)。 – tucuxi