LibGDX:循环时使用SpriteBatches

时间:2014-02-09 10:03:57

标签: java android performance libgdx sprite

我有一个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()部分内循环是否很好。

或者是否有其他替代方案可以提供更好的性能?

感谢您的回答,

1 个答案:

答案 0 :(得分:7)

你绝对应该选择第一个变体。只要有必要,SpriteBatch将在内部以捆绑方式将调用发送到OpenGL。如果您致电batch.end(),您将强制SpriteBatch在每个循环期间发送待处理的OpenGL命令。

昂贵的代码包含在私有方法SpriteBatch#renderMesh()中,每次需要刷新OpenGL命令时,SpriteBatch都会自动调用它。如果您因任何原因需要刷新命令,也可以通过调用SpriteBatch#flush()明确地执行此操作,这仍然比通过调用SpriteBatch#end()结束SpriteBatch更便宜。