JAVA と OpenGL-ES を使用して、Android で 2D ビデオゲームを開発しています。
私はそれがガベージコレクターだと思うことに問題があります。何をしていても、数秒ごとにゲームがフリーズします。
私はそれについていくつかのドキュメントなどを読んでいて、持っていたすべてのループ反復子を削除しました。今では for(i=0,...) などのソリューションを使用しています。事実、それはパフォーマンスで何もしませんでした...
私は自分のコードを調べていて、問題を引き起こしている可能性があると思われるものを見つけました。それは、アニメーション内のスプライト間で変更する方法です。
たとえば、いくつかのキーを押して移動できるヒーローがいます。歩くと、スプライトがフレーム間で変化します。これを行うには、テクスチャ バッファを移動して、イメージの目的の部分を狙います。そして、そうするたびに、私はこの関数を使用します:
protected void SetTextureBuffer(float xo, float xf, float yo, float yf) {
float textureVertexs[] = {
xo, yf, // top left
xf, yf, // bottom left
xf, yo, // top right
xo, yo // bottom right
};
// a float has 4 bytes so we allocate for each coordinate 4 bytes
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(textureVertexs.length * 4);
byteBuffer.order(ByteOrder.nativeOrder());
// allocates the memory from the byte buffer
textureBuffer = byteBuffer.asFloatBuffer();
// fill the vertexBuffer with the vertices
textureBuffer.put(textureVertexs);
// set the cursor position to the beginning of the buffer
textureBuffer.position(0);
}
呼び出されるたびにバッファを作成するためにメモリを割り当てます。これは、アニメーションを持つエンティティがさらにあるため、毎秒何度も発生する可能性があります...
これは問題になると思いますか?それとも私はこれを間違って見ていますか?これが問題である場合...別のより効率的な方法でこれを解決するにはどうすればよいですか?