2012-02-22 20 views
0

私はゲームプログラミングを初めて使いました。現在、ゲームのエンジンを概念化しています。私は、3dコンウェイのGame of LifeやDwarf Fortressのような、ブロックベースの2d-z軸の世界について考えていました。ゲームループを最適化する

これは私にはわかりました.3Dグリッドのすべてのエンティティ、すべてのゲームループを繰り返し処理する必要があります。たとえば、100x100x100の3Dキューブと、重複を許可する場合は100のキューブです。これはゲームループごとに1,000,000〜100,000,000のオブジェクトです。すべてが動いているわけではありません(もちろん、すべてがレンダリングされているわけではありません)が、私は物理的なものすべてをチェックする必要があります(エンティティが上の(9)、下の(9)

適度に速いゲームループを維持するためにゲームループを十分に最適化するにはどうすればよいですか?

私は現在、HPのような各ブロックの個々のプロパティを格納するためにAndroidの組み込みsqliteデータベースを使用していますが、gameMapは配列としてメモリに格納されています[100] [100] [100] [ entityId:entityType]を指定します。

これは私のことです。

答えて

1

トリックは、基本的に、あなたがする必要がないときにチェックしないようになります。あなたの物理学がブロックを互いに積み重ねることを前提とすると、しばらく休んでいたらスタックをチェックしないようにして、突っ込んだ場合には再チェックを開始するようなものでしょう。ゲーム内で可能なものによっては、表面下のブロックを無視することもできます。

まだ、ゲームループごとに100万回のチェックを行うのはおそらく妥当でしょう。また、ゲームの種類によっては、フレームごとにすべてをチェックする必要はありません。あなたがフレームごとにその一部を行ったり、レンダリングやプレイヤーの物理とは別のより遅いスレッドでブロック物理を走らせたりすると目立たないでしょう。

実際、最適化は、最初から設計するのではなく、最終的にバックフィッティングする方が良い方法です。最良の計画は、ゲームの物理をできるだけ簡単にコード化し、基本的なコードを動作させ、デバッグし、十分速くない場合は、フレームレートを見ながら最適化を試みることです。