あなたが言及するこれらのステップは、おそらく別のエンジンで行われます。単純なゲームエンジンは通常、1つのパスでそれらを使用するだけです。あなたのシーケンス
for each object
do physics
do game logic
draw
なる
call physics subsystem
call game logic subsystem
call drawing subsystem
物理エンジンが位置とサイズを処理します。
Game Logic Engineは、Physics Engineが変更したもの(ウェイポイントを妨害する可能性がある...)、キャラクターの目標、およびキャラクターが行うべき動作を解釈し、スケジュールされたスクリプトを実行します(このシンク関数)。
描画エンジンは、どのオブジェクトが表示されているかを描画し、Quakeエンジンはここで一種のチートをしているため、彼はどのオブジェクトが表示されているかを知っています(描画セクションを参照)。
あなたへの私のアドバイスは、シミュレーションがゲームエンジンではなくどのように行われるかを研究することです。ゲーム開発に関連する巨大なポップカルチャーがあり、ゲームエンジンは命令型言語で作成されています(伝統と速度のため)。ですから、良い教科書(理論ではなく)を入手し、エンジンやパズルを何時間も見ていたのではなく、エンジン(実践)を見る方が私にとってより賢明でした。
物理
すべてのエンティティを反復処理して{think、draw}を実行するという概念全体が問題を引き起こす可能性があります。衝突などがあります。私はバルブがHavokを持っていると信じています。Havokが十分に正確な物理を処理していると思います。
考える
Think関数は、ゲームの時間がnextthinkの時間と等しいときに実行されます。これはQuakeエンジンでこのように機能し、QuakeエンジンはHalf Lifeエンジンの基本です。毎回実行されるわけではありません。
内部的には、エンティティのリストを繰り返し処理して、think関数を呼び出す時間が経過したかどうかを確認するだけです。時間の複雑さはO(N)になります。Nはエンティティの数です。
非常に多数のエンティティがある場合は、それがfpsをどの程度改善するかを測定する必要があります。アムダールの法則により、目に見えないスピードアップになる可能性があることに注意してください。つまり、すべての項目を反復処理し、1つの数値を減らして確認するだけです。
エンティティをnextthinkで並べ替えることでスピードアップします(エンティティへのポインタのリストを作成し、毎回それを並べ替えます。エンティティの配列ではなく、エンティティはnextthinkをいつでも変更する可能性があるため、配列に再配置するとO(N)がO(N)になります1)リスト内)。
LinuxのO(1)スケジューラも確認する必要があります。
ドロー
エンジンは、カメラがある領域からほぼ見えるものを描画します。ゲームレベルはツリーに分割され、領域はそのツリーの葉です。詳細については気にしません...したがって、エンティティが表示されている場合は、一連の表示されているエンティティに入れられて描画されます。
それらは、潜在的に目に見える領域である領域を格納します。これは「潜在的に表示されるセット」、略してPVSと呼ばれます。PVSの視覚化があり、緑のカプセルがプレーヤーであり、彼の周りには彼のPVSが含むものがレンダリングされています。
<some commercial engine>
ですか?