Calling SpriteBatch.begin() and end()



我正在使用libGDX在Java中制作游戏。在每个对象的渲染方法中,调用 SpriteBatch.begin() 和 SpriteBatch.end()。这是一个好的做法吗?我应该只在处理所有渲染的 Screen 类中调用 begin() 和 end() 吗?

不,这不是好的做法,因为它违背了 SpriteBatch 的目的:将多个精灵批处理到单个绘制调用中,以最大程度地减少每个绘制调用的相关性能损失。

您应该尽量减少对begin()end()的调用次数,但这仅在您绘制一系列都引用相同纹理的对象时才有用(它们可能是来自同一纹理图集的纹理区域)。每次使用引用不同纹理的内容调用spriteBatch.draw()时,它相当于(在性能上)调用end()并再次begin()。每次打电话给setShader()setProjectionMatrix()setBlendFunction()时也是如此。

我认为最干净的方法是如您所描述的。仅在 Screen 类中调用 begin()end()。但是,如果您使用多个不同的纹理图集,则还应对对象的绘制顺序进行排序,以对共享相同纹理(或混合模式/着色器/投影矩阵)的对象进行分组。

相关内容

  • 没有找到相关文章