そのため、私のゲームでは、ビューに一貫性のないレートが描画されます。これにより、グリッチが発生します。私はinvalidate()で多くの問題に遭遇してきました。ミートホッド。簡単なアイデア-どこを見ても、大量の強力なコードに夢中になります。
2 に答える
あなたは私たちに多くの情報、特にコードを提供していません。
あなたができるいくつかのことは次のとおりです。
- 初期フレームレートを、アプリケーションの実行を観察する最低値に設定します。つまり、現在1/60に設定されているが、フレームレートが継続的に1/30に低下する場合、1/30に設定される場合などです。
- より効率的にするために、描画呼び出しを作り直します。
- 行列を乗算して、複数の変換を1つの変換に結合してみてください。つまり、スケーリング、変換、回転が必要な場合は、3つの個別の変換を適用する代わりに、これら3つの行列を乗算して、その1つの変換を頂点に適用します。
- 不要な場合は、リスト/配列全体を反復処理しないようにしてください。
- 開梱のオーバーヘッドを回避するために、ループ内で処理する必要のあるものすべてに対して、可能な限り最低レベル/最も原始的な構造を使用してみてください。
[2012-08-27に編集]
タイムステップを修正するための役立つリンク:http://gafferongames.com/game-physics/fix-your-timestep/
ゲームループでは、反復の間に経過した実際の時間が考慮されていないようです。
問題は、ループの反復間に一定の時間が存在するという仮定です。ただし、この時間は、シーン内のオブジェクトの数、コンピューター上の他のプロセス、またはコンピューター自体によっても変動する可能性があります。
これは、ゲームプログラミングでよくある、やや微妙な間違いですが、簡単に修正できます。秘訣は、各描画ループの終了時に時刻を保存し、最後の更新と開始時の現在の時刻との差をとることです。次に、実際の経過時間に基づいて、すべてのアニメーションとゲームの変更をスケーリングする必要があります。
これについては、しばらく前にブログに書いています:http: //laststop.spaceislimited.org/2008/05/17/programming-a-pong-clone-in-c-and-opengl-part-i //
パートIIは特にこの問題をカバーしています:http: //laststop.spaceislimited.org/2008/06/02/programming-pong-in-c-and-opengl-part-ii/