-2
我正在開發Android中的2D視頻遊戲,使用JAVA和OpenGL-ES。GC與Android視頻遊戲
我有一個問題,我認爲這是垃圾收集器。無論我在做什麼,每隔幾秒鐘,遊戲就會凍結。
我一直在閱讀關於它的一些文檔,並且刪除了我所有的循環迭代器,現在我用於(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);
}
它分配的內存來創建緩衝每次被調用,這可能是很多次每秒,因爲有更多的實體動畫...
你認爲這可能是一個問題?還是我看錯了?如果這是一個問題...我怎麼能以另一種更有效的方式解決這個問題?
嘗試刪除'ByteBuffer byteBuffer = ByteBuffer.allocateDirect(textureVertexs.length * 4); byteBuffer.order(ByteOrder.nativeOrder());'行 – m0skit0
然後我分配給textureBuffer呢? – Frion3L
對不起,也刪除'textureBuffer = byteBuffer.asFloatBuffer();'。在你的類的構造函數/初始化器中分配'textureBuffer'一次。由於您不需要保留以前的數據,因此無需再次重新創建緩衝區。所以你只需要覆蓋同一緩衝區中的舊數據。 – m0skit0