静态精灵批处理?

4
随着我的研究深入,到处都说我们应该每个实例只使用一个精灵批处理。但是如果我将精灵批处理设置为控制游戏的类中的静态变量(调用不同的屏幕等),那怎么办?
当我尝试这样做时,它很好地工作了,但这是一种好的做法还是可能会在未来出现问题?如果可以这样做,我也可以共享舞台和形状渲染器吗?
注意:我尝试使用“静态批处理技术”的主要原因是当我尝试处理舞台、精灵批处理或形状渲染器时,Java会崩溃。

1
将其设为静态似乎不是正确的方法。相反,尝试传递spritebatch以共享它。 - William Reed
谢谢你的评论。太棒了! - raco
2个回答

2

我也是这样做的,到目前为止还没有遇到任何问题。

你需要小心使用SpriteBatch.begin()SpriteBatch.end(),因为你可能不知道它在哪里开始,以及在共享时它在哪里停止。

同样适用于Camera/ProjectionMatrix。如果你正在使用着色器,则当前使用的ShaderProgram也一样。

确保你始终清楚地知道你在哪里使用你的SpriteBatch,否则你可能会某天面临奇怪的错误。

Stage不应该被共享,因为它可能会服务于不同的目的。对于不同的UI,只使用一个Stage是没有任何意义的。

ShapeRenderer可以被共享,因为它的工作方式与SpriteBatch类似,但可能你只想在一个地方使用它。

dispose()应该能够正常工作。你必须确保以正确的顺序处理所有内容,这样最后就不会留下任何东西并导致异常。


那太好了。因为我只在需要时一次性使用批处理,所以不会出现问题。我将批处理传递给需要呈现的对象,这样我就可以在同一个地方拥有所有东西。非常感谢您的评论。 - raco

1
正如@noone已经说过的那样,只要你小心一点就不会有任何问题。但我想指出另一件事:在某些屏幕(如MenuScreen、OptionScreen等)中,您可能需要使用Scene2dUi来进行一些UI处理。因此,您将使用属于该屏幕而不是共享的Stage。所以在这种情况下,您应该记住,每个舞台都有自己的SpriteBatch和Camera。因此,您可能只需要在GameScreen中添加一个额外的SpriteBatch。如果是这种情况,我不会使其静态,并且仅在GameScreen中拥有它。就像noone说的那样,dispose()应该可以工作,如果您使用正确的顺序,因此即使使用多个SpriteBatch也不应该会引起任何问题。因此,我认为两种方法都可以,都是很好的方法。这取决于您的设计以及您希望在何处/如何使用SpriteBatch和Camera。

没问题。祝你的游戏好运! - Robert P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接