我有一个2d的Sprite数组,包含大约。 50个精灵。我想在render方法中绘制它们。我不知道什么会给我最好的表现。这些是我提出的两种选择:
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()部分内循环是否很好。
或者是否有其他替代方案可以提供更好的性能?
感谢您的回答,
贝
答案 0 :(得分:7)
你绝对应该选择第一个变体。只要有必要,SpriteBatch
将在内部以捆绑方式将调用发送到OpenGL。如果您致电batch.end()
,您将强制SpriteBatch
在每个循环期间发送待处理的OpenGL命令。
昂贵的代码包含在私有方法SpriteBatch#renderMesh()
中,每次需要刷新OpenGL命令时,SpriteBatch都会自动调用它。如果您因任何原因需要刷新命令,也可以通过调用SpriteBatch#flush()
明确地执行此操作,这仍然比通过调用SpriteBatch#end()
结束SpriteBatch更便宜。