java静态sprite批处理?
因为我的研究到处都在进行,所以有人说我们应该在每个实例中只使用一个sprite批。但是如果我在控制游戏的类中将sprite batch设置为static(调用不同的屏幕等),会怎么样呢
当我尝试这一点时,它的工作方式很有魅力,但这是一个好的做法,还是它可能会在将来导致一些问题。那么,如果可以的话,我还可以分享舞台和形状渲染器吗
注意:我尝试使用“静态批处理技术”的主要原因是,当我试图处理stage、sprite批处理或形状渲染器时,java崩溃
你可以在下面搜索框中键入要查询的问题!
因为我的研究到处都在进行,所以有人说我们应该在每个实例中只使用一个sprite批。但是如果我在控制游戏的类中将sprite batch设置为static(调用不同的屏幕等),会怎么样呢
当我尝试这一点时,它的工作方式很有魅力,但这是一个好的做法,还是它可能会在将来导致一些问题。那么,如果可以的话,我还可以分享舞台和形状渲染器吗
注意:我尝试使用“静态批处理技术”的主要原因是,当我试图处理stage、sprite批处理或形状渲染器时,java崩溃
# 1 楼答案
正如@noone allready所说的,如果你小心的话,它不会引起任何问题。 但我只想指出另一件事:在一些
Screen
(MenuScreen
,OptionScreen
,…)您可以使用Scene2dUi
来处理一些UI内容。因此,您将使用Stage
,它们属于Screen
并且不共享。所以在本例中,您应该记住,每个Stage
都有自己的SpriteBatch
和Camera
。因此,您可能只需要在您的GameScreen
。如果是这样的话,我就不会把它设为静态的,而只把它放在GameScreen
中。 正如noone所说的dispose()
应该可以工作,如果您使用正确的顺序,那么使用超过1SpriteBatch
应该不会引起任何问题。 因此,我认为这两种方法都会起作用,都是很好的方法。这取决于您的设计以及如何/在何处使用SpriteBatche
和Camera
# 2 楼答案
我也是这样做的,到目前为止我没有遇到任何问题
您需要小心使用
SpriteBatch.begin()
和SpriteBatch.end()
调用,因为您可能永远不知道它已在哪里启动,以及在共享时在哪里停止这同样适用于
Camera
/ProjectionMatrix。以及当前使用的ShaderProgram
,以防使用着色器确保您始终完全清楚自己在用
SpriteBatch
做什么,否则有一天您可能会遇到奇怪的bugStage
不应共享,因为它可能有不同的用途。对于不同的UI,只使用一个Stage
没有任何意义ShapeRenderer
可以共享,因为它的工作原理与SpriteBatch
类似,但您可能只想在一个地方使用它dispose()
应该可以正常工作。您必须确保以正确的顺序处理所有内容,以便最终不会留下任何内容并导致异常