我有一个 2d Sprite 数组,其中包含大约。 50 个 Sprite 。我想在渲染方法中绘制它们。我不知道什么会给我最好的表现。这是我想出的两种选择:
batch.begin();
for(Sprite[] row : sprite2d) {
for(Sprite cell : row) {
cell.draw(batch);
}
}
batch.end();
或者:
for(Sprite[] row : sprite2d) {
for(Sprite cell : row) {
batch.begin();
cell.draw(batch);
batch.end();
}
}
我想第一种选择更好,因为我不会一遍又一遍地开始批处理。另一方面,我不确定在 batch.begin() - batch.end() 部分内循环是否是好的做法。
或者是否有另一种性能更好的替代方案?
感谢您的回答,
托尼
最佳答案
您绝对应该更喜欢第一个变体。 SpriteBatch
将在必要时在内部将调用打包发送到 OpenGL。如果您调用 batch.end()
,您将强制 SpriteBatch
在每个循环期间发送挂起的 OpenGL 命令。
昂贵的代码包含在私有(private)方法 SpriteBatch#renderMesh()
中,每次需要刷新 OpenGL 命令时,SpriteBatch 都会自动调用该方法。如果您出于任何原因需要刷新命令,您也可以通过调用 SpriteBatch#flush()
显式地执行此操作,这仍然比通过调用 SpriteBatch#end 结束 SpriteBatch 更便宜()
。
关于java - LibGDX:循环时使用 SpriteBatches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657730/