Java LibGDX:循环时使用spritebatch
我有一个包含大约50个精灵的2d精灵阵列。我想在render方法中绘制它们。我不知道什么能给我最好的表现。以下是我提出的两个备选方案:Java LibGDX:循环时使用spritebatch,java,android,performance,libgdx,sprite,Java,Android,Performance,Libgdx,Sprite,我有一个包含大约50个精灵的2d精灵阵列。我想在render方法中绘制它们。我不知道什么能给我最好的表现。以下是我提出的两个备选方案: batch.begin(); for(Sprite[] row : sprite2d) { for(Sprite cell : row) { cell.draw(batch); } } batch.end(); 或: 我认为第一种选择更好,因为我不会一次又一次地开始批量生产。另一方面,我不确定在batch.begin()-bat
batch.begin();
for(Sprite[] row : sprite2d) {
for(Sprite cell : row) {
cell.draw(batch);
}
}
batch.end();
或:
我认为第一种选择更好,因为我不会一次又一次地开始批量生产。另一方面,我不确定在batch.begin()-batch.end()部分中循环是否是好的实践
或者是否有另一种可以提供更好性能的替代方案
谢谢你的回答
托尼你肯定更喜欢第一种变体
SpriteBatch
将在必要时以捆绑方式在内部向OpenGL发送调用。如果调用batch.end()
,将强制SpriteBatch
在每个循环期间发送挂起的OpenGL命令
昂贵的代码包含在私有方法
SpriteBatch#renderMesh()
中,每次需要刷新OpenGL命令时,SpriteBatch都会自动调用该方法。如果出于任何原因需要刷新命令,也可以通过调用SpriteBatch#flush()
显式地执行此操作,这样成本仍然会更低,然后通过调用SpriteBatch#end()
结束SpriteBatch,您肯定更喜欢第一个变体SpriteBatch
将在必要时以捆绑方式在内部向OpenGL发送调用。如果调用batch.end()
,将强制SpriteBatch
在每个循环期间发送挂起的OpenGL命令
昂贵的代码包含在私有方法SpriteBatch#renderMesh()
中,每次需要刷新OpenGL命令时,SpriteBatch都会自动调用该方法。如果出于任何原因需要刷新命令,也可以通过调用SpriteBatch#flush()
显式执行,这比调用SpriteBatch#end()
来结束SpriteBatch更便宜
for(Sprite[] row : sprite2d) {
for(Sprite cell : row) {
batch.begin();
cell.draw(batch);
batch.end();
}
}