ash フレームワークに関する特定の考慮事項を入力しなくても、物理エンジンとグラフィック エンジンの更新を処理する方法は多数ありますが、使用しているフレームワークに必ずしも依存するわけではありません。まず第一に、十分なハードウェア要件を持つデバイスのみを対象とする AIR モバイル アプリを作成しない限り、安定した 60fps フレームレート (または任意の安定したフレームレート) を想定することはできません。これにより、いくつかのオプションが残ります。
物理エンジンを固定のデルタ t で更新します。この場合、欠落したフレームがあるとゲームの物理が遅くなります。良くない
最後のフレーム間の実際のデルタ t を測定し、それに応じて物理エンジンを更新して、前のフレームの遅延を補正します。ほとんどの場合、これで十分です。
何らかの理由で物理エンジンが固定増分を必要とする場合 (たとえばupdatePhysic(1/30);
、 とはあまりにも異なる結果を返すupdatePhysic(1/60); updatePhysic(1/60);
場合、またはリプレイの計算やネットワーク化されたクライアントの物理同期を維持するなど、完全にフレームレートに依存しない再現可能な物理が必要な場合) に置き換えますupdatePhysic(dT);
(
for(var i:int = 0; i< dT * 60; ++i) updatePhysic(1/60);
デルタ t がそうでない場合)常に 1/60 の倍数の実装であり、次の更新のために分割の残りを蓄積する必要があります)
最適なパフォーマンスとマルチコア CPU の最適な使用が必要な場合は、別のワーカーで物理エンジンを更新することを検討できますが、Flash Player のサポート、デバッグ ツール、およびワーカー間のデータ共有はまだ実験段階です!
いずれにせよ、私はポイントがわかりません
レンダリング システムを 60 fps で更新したいのですが、遅延がある場合に備えて一定の時間間隔でゲーム ロジックを更新しますか?
「ラグ」がある場合は、表示が 60 fps で更新されないことを意味し、たとえそうであったとしても (別のワーカーで物理演算を実行した場合)、同じフレームが再び表示されるためです。
要約すると、物理エンジンをグラフィック エンジンより「速く」実行する必要があるかもしれませんが、その逆はありません。
また、actionscript では、実際のフレームレートよりも速くティックをトリガーすることはできません。Timer、setTimeout、setInterval... への呼び出しは、せいぜいディスプレイと同期されますが、決して速くはなりません。これが、物理エンジンを呼び出す必要がある理由です。たとえば、ティックを60 fpsに設定するだけでなく、メインループ内で手動で数回