2011-01-08 10 views
1

私はFlexを使ってゲームを開発していて、メインループを維持するためにTimerクラスを使用していました。Enterframeイベントに関する問題

しかし、メインループを行うためにenterFrameイベントを使用しようとすると、いくつかの問題がありました。

まず、物理シミュレーションが速すぎるようでした。 enterFrameイベントはフレームごとに複数回呼び出されますか?私はアプリケーションのグローバルフレームレートを24に設定しました。アプリケーションは1/24秒ごとにイベントを設定しないでください。

2番目の問題は、ゲームがこのように実行されたときに追加されるMXMLコンポーネントが表示されないことです。なぜこのようなことが起こるのか全く分かりません。

お願いします。

ありがとうございました。

+0

いくつかのフレームは、他のものよりもレンダリングに時間がかかります。 FPSを24に設定すると、新しいフレームが約* 24回/秒で表示されますが、正確には表示されません。 enter-frameイベントはフレームごとに1回のみブロードキャストされますが、同じイベントリスナーを複数回アタッチしている可能性があります(その結果、その関数はフレームごとに複数回呼び出されます)。あなたのタイマー間隔は何でしたか?また、いくつかのコードが表示されていない限り、欠落しているコンポーネントを手助けすることはできません(追加された部分が良いスタートになります) – Cameron

+0

あなたの物理にBox2Dを使用していますか? – Zevan

+0

ええ、物理のBox2DFlash – user434565

答えて

2

フレームレートを偶数としてカウントしないでください。または、入力フレームが一定の間隔で呼び出されます。タイマークラスでさえ100%正確ではありません。

タイミングを実行するときは、常にフレーム更新の間にデルタを使用し、そのデルタを計算に使用します。フラッシュアプ​​リケーションが予期せぬ理由で凍ってしまったときに、異常な動作を避けるためにデルタが決して値を超えないように、安全ガードを入れてください。

この記事は完全にそれをすべて説明: http://gafferongames.com/game-physics/fix-your-timestep/

1

フレームレートは望ましい値です。ユーザーが遅いマシンで実行すると、出力が遅すぎることがあります。良い古いものに戻すのはどうですか? setInterval

+0

+1、あなたはフレームレートについて正しいです。しかし、 'setInterval'は遅いマシンをもっと速くするつもりはありません。 –