2

Javaでアニメーションを作りたいです。私は見ました:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

私が驚いたのは、タイマー アクション ハンドラーでのことです。

  • 関数呼び出しを実際に描画することはありません。状態を更新するだけなので、タイマーアクションは「シミュレーション」に使用されているようです
  • 再塗装依頼を行います
  • Swing は都合のよいときにリクエストを再描画します

これは私にはやや奇妙に思えます。

  • Swing は複数の再描画要求を 1 つにまとめることができます
  • タイマーで fps をカウントしている場合、オーバーカウントする可能性があります (複数の再描画が 1 つになるため)

質問: サンプル コードを読み間違えているのでしょうか、それとも Java でアニメーションを行う「正しい」方法ですか?

ありがとう!

4

3 に答える 3

5

状態の更新とレンダリングを別々に行うのはごく普通のことです。

この点では、Java/Swing はごく普通のことです。

理由:

  • 状態を更新できるものはたくさんあります (タイマー イベント、ユーザー入力など)。そのため、変更を非常に軽量にし、変更を画面の更新から切り離して、いつでも実行できるようにすると便利です。
  • モデルの状態の更新とは異なる速度で画面の更新を実行したい場合がよくあります。通常、アニメーション/状態の更新には一定の間隔が必要ですが、画面の更新はできるだけ速く行う必要があります。これは、アニメーションで補間を行っている場合に特に当てはまります。
  • 多くの場合、レンダリングは特定のコンテキスト (この場合は Swing UI スレッド) で行う必要があります。状態の変更をこのコンテキストでのみ発生するように制限する必要は必ずしもありません
  • ビュー (画面表示) をデータ モデルから分離することをお勧めします。優れた概念設計の違いとは別に、これにより、ディスプレイから独立してデータ モデルをテストしたり、GUI を使用せずにサーバー上でモデルのバージョンを実行したりすることができます。
于 2012-05-11T05:59:49.593 に答える
2

「アニメーション」の場合、JavaFX は主にこの目的のために構築されているため、Java よりもはるかに優れています。

于 2012-05-11T06:11:35.960 に答える
0

You might want to try Trident. Its a clean and simple animation library without a lot of bells and whistles and makes your life a LOT easier if your trying to do animations in Swing.

于 2012-05-12T10:51:48.657 に答える