调用 SpriteBatch.begin() 和 end()

Calling SpriteBatch.begin() and end()

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

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

您应该尽量减少对 begin()end() 的调用次数,但这仅在您绘制的一系列对象都引用相同的纹理(它们可能是来自相同的纹理图集)。每次你用引用不同纹理的东西调用 spriteBatch.draw() 时,它等同于(在性能上)再次调用 end()begin()。每次调用 setShader()setProjectionMatrix()setBlendFunction().

时也是如此

我认为最简洁的方法就是按照您的描述进行操作。仅在屏幕 class 中调用 begin()end()。但是,如果您使用多个不同的纹理图集,您还应该对对象的绘制顺序进行排序,以将共享相同纹理(或混合 mode/shader/projection 矩阵)的对象分组。