2012-02-22 12 views
2

ポインタをその位置にジャンプさせるmouseMove()メソッドがあります。マウスを画面全体にスムーズに移動させたいと思っています。私は、開始x、開始y、終了x、終了y、滑走の合計時間、および滑走中に行うステップ数を取るmouseGLide()というメソッドを書く必要があります。 n個のステップで(start x、start y)から(end x、start y)に移動することによって、マウスポインタをアニメートする必要があります。総滑空はtミリ秒かかります。javaを使用して画面全体にスムーズにマウスを移動する方法は?

私はどのように始めるのか分かりませんが、誰かがこれを始めるのを助けることができますか?この問題を解決するには、どのようなステップを実行する必要があるのか​​誰にでも教えてください。

答えて

21

まず、質問で定義したパラメータが空の空のメソッドを書きましょう。

次に、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(); 
    } 
} 
+0

感謝!それは尋問者に受け入れられませんでしたが、本当に私を助けました:-)しかし、あなたは基本的に睡眠の遅れを取り除くことができます。 – moeTi

+0

洗練されたものは、いつもdtを使うのではなく、起床と移動の所要時間を測定してから(dt-timeSinceLastMove)寝ることです(これは、のステップ1)。 – tucuxi

関連する問題