我正在使用libGDX在Java中制作游戏。在每个对象的render方法中,调用SpriteBatch.begin()和SpriteBatch.end()。这是一个好习惯吗?我应该只在处理所有渲染的Screen类中调用begin()和end()吗?
答案 0 :(得分:2)
不,这不是一个好习惯,因为它违背了SpriteBatch的目的:将多个精灵批处理到一个绘制调用中,以便最小化每个绘制调用的相关性能损失。
您应该尽可能减少对begin()
和end()
的调用次数,但这只有在绘制一系列所有引用相同纹理的对象时才有用(它们可能来自同一个TextureRegions)纹理图集)。每次使用引用不同纹理的内容调用spriteBatch.draw()
时,再次调用end()
和begin()
都是等效的(性能)。每次拨打setShader()
或setProjectionMatrix()
或setBlendFunction()
时都是如此。
我认为最干净的方法就像你描述的那样。只能在Screen类中调用begin()
和end()
。但是如果你使用多种不同的纹理图册,你也应该对你的对象进行排序。绘制顺序以对具有相同纹理(或混合模式/着色器/投影矩阵)的组进行分组。