有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java静态sprite批处理?

因为我的研究到处都在进行,所以有人说我们应该在每个实例中只使用一个sprite批。但是如果我在控制游戏的类中将sprite batch设置为static(调用不同的屏幕等),会怎么样呢

当我尝试这一点时,它的工作方式很有魅力,但这是一个好的做法,还是它可能会在将来导致一些问题。那么,如果可以的话,我还可以分享舞台和形状渲染器吗

注意:我尝试使用“静态批处理技术”的主要原因是,当我试图处理stage、sprite批处理或形状渲染器时,java崩溃


共 (2) 个答案

  1. # 1 楼答案

    正如@noone allready所说的,如果你小心的话,它不会引起任何问题。 但我只想指出另一件事:在一些ScreenMenuScreenOptionScreen,…)您可以使用Scene2dUi来处理一些UI内容。因此,您将使用Stage,它们属于Screen并且不共享。所以在本例中,您应该记住,每个Stage都有自己的SpriteBatchCamera。因此,您可能只需要在您的 GameScreen。如果是这样的话,我就不会把它设为静态的,而只把它放在GameScreen中。 正如noone所说的dispose()应该可以工作,如果您使用正确的顺序,那么使用超过1SpriteBatch应该不会引起任何问题。 因此,我认为这两种方法都会起作用,都是很好的方法。这取决于您的设计以及如何/在何处使用SpriteBatcheCamera

  2. # 2 楼答案

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

    您需要小心使用SpriteBatch.begin()SpriteBatch.end()调用,因为您可能永远不知道它已在哪里启动,以及在共享时在哪里停止

    这同样适用于Camera/ProjectionMatrix。以及当前使用的ShaderProgram,以防使用着色器

    确保您始终完全清楚自己在用SpriteBatch做什么,否则有一天您可能会遇到奇怪的bug

    Stage不应共享,因为它可能有不同的用途。对于不同的UI,只使用一个Stage没有任何意义

    ShapeRenderer可以共享,因为它的工作原理与SpriteBatch类似,但您可能只想在一个地方使用它

    dispose()应该可以正常工作。您必须确保以正确的顺序处理所有内容,以便最终不会留下任何内容并导致异常