0

いくつかのオブジェクトのアニメーションを処理する必要があります。今のところ、 、 、および の 4 つの方法でそれをgetAnimationCooldown()行いresetAnimationCooldown()ましsubAnimationCooldown()nextFrame()

しかし、確かにこれを行う簡単な方法があります。nextFrame()100msごとにメソッドを呼び出したいです。これを行う簡単な方法はありますか?私は知っScheduledExecutorTimerいますが、彼らがこのタスクのために新しいスレッドを作成しているのを見てfor()、このループ内のすべてのオブジェクトに対してループ内でこのメソッドを呼び出す必要があります。だから、それを次のように呼び出す簡単な方法はありますか:

for (Object object : objects) {
 every(100, TimeUnit.MILISECONDS) {
  object.nextFrame();
 }
}
4

1 に答える 1

1

いくつかのアイデアは次のとおりです。

最初: 100ms ごとに nextFrame を呼び出すという要件を逆にすることは可能ですか? もしそうなら、「できるだけ頻繁にnextFrameを呼び出すと、オブジェクトは最後のnextFrameからの時間だけ適切に更新されます」になる可能性がありますか? それでも十分頻繁に呼び出す必要がありますが、これにより、正確な 100 ミリ秒間隔で nextFrame を呼び出すというプレッシャーがなくなります。

このアイデアでは、メイン ループは次のように、言及した各アクションを処理します。

while(!isGameOver()) {
  moving();
  shooting();
  for (Object object : objects) {
    object.nextFrame();
  }
}

2 番目: 完全にイベント駆動型のモデルに切り替えますが、そのモデルの「インサイド アウト ロジック」の危険性に注意してください。

于 2013-02-09T12:40:14.543 に答える