すべてのマシンで同じように高速に見えるようにアニメーション(たとえば、SWTで位置が変化するコンポジット)を実装する通常の方法は何ですか?
素朴なアプローチは、タイムスタンプを使用して、次のアニメーションステップまで時間を停止することです。
もっと専門的な方法はありますか?
私はjavax.swing.Timer
定期的にを使用しており、一貫性のあるアニメーションに最適です。あなたがしなければならないのは、を実装するクラスを実装することです(あなたはそれをあなたのFrame
またはにすることさえできますPanel
)ActionListener
。
タイマーはactionPreformed(...)
コンストラクターで指定された間隔で(または必要に応じて後で)メソッドを呼び出し、その間隔からすべての再描画を実行できますTimer
。通常、これには、必要なオブジェクトの状態を更新し、関係するオブジェクトを呼び出すことがrepaint()
含まれPanel
ます。
Timer
必ず'sstart()
メソッドを呼び出してください。それは私に多くの頭痛を引き起こしました!
唯一のアプローチはタイムスタンプを使用することです。ナイーブなアプローチとプロのアプローチは、使用方法が異なります。
ナイーブなアプローチでは、スレッドとを使用しますThread.sleep()
。専門的なアプローチでは、タイマーを使用して特定の間隔でコードを実行し、タイマーに遅延とジッターの処理方法を決定させます。
あなたはタイマーについてもっと学ぶことができます、クラスTimer
とを見てくださいTimerTask
。java.util.Timer.scheduleAtFixedRate(TimerTask, Date, long)
良いスタートになるはずです。コードは新しいスレッドで実行されるため、通常のツールを使用してUIスレッドのキューにイベントを挿入する必要があることに注意してください。