调用SpriteBatch.begin()和end()

时间:2015-01-06 16:59:22

标签: java performance graphics libgdx

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

1 个答案:

答案 0 :(得分:2)

不,这不是一个好习惯,因为它违背了SpriteBatch的目的:将多个精灵批处理到一个绘制调用中,以便最小化每个绘制调用的相关性能损失。

您应该尽可能减少对begin()end()的调用次数,但这只有在绘制一系列所有引用相同纹理的对象时才有用(它们可能来自同一个TextureRegions)纹理图集)。每次使用引用不同纹理的内容调用spriteBatch.draw()时,再次调用end()begin()都是等效的(性能)。每次拨打setShader()setProjectionMatrix()setBlendFunction()时都是如此。

我认为最干净的方法就像你描述的那样。只能在Screen类中调用begin()end()。但是如果你使用多种不同的纹理图册,你也应该对你的对象进行排序。绘制顺序以对具有相同纹理(或混合模式/着色器/投影矩阵)的组进行分组。