LibGDX精灵批处理和运行时添加新精灵

3
我是一个使用libgdx引擎的新程序员,对于精灵批处理的行为有些疑问。具体来说,在程序生命周期中如何将精灵添加到批处理中以进行绘制。目前所有精灵的示例都使用了类似以下代码的一些代码: batch.begin(); sprite.draw(batch); batch.end(); 等等。由于每个精灵的 .draw 必须在批处理中调用,因此我不清楚如何绘制不同数量的精灵...感谢您提前解释!

看一下舞台演员系统。它已经实现了一个“舞台”,在这里你可以添加所有的演员。通过简单的 .draw 舞台,它会绘制每个演员的当前位置和状态。你可以查看它的代码来理解这个系统。也可以看一下游戏循环概念。 - bemeyer
1
太棒了,Benn的建议让我大开眼界! - TypingTurtle
1个回答

3
简单来说,每次调用sprite.draw()相当于请求在某个位置绘制精灵。每次调用sprite.draw()都会将精灵添加到批处理中。当调用batch.end()时,所有添加到批处理中的精灵将被绘制,并且批处理将被清空。由于批处理的内容不是持久性的(即当调用batch.end()时会被清空),因此每次使用它时都必须将精灵和图像添加到其中。
在以下示例中,要绘制的所有精灵都存储在精灵集合中,并在每次绘制时将其添加到批处理中,如果从render()方法调用,则在每个帧上都会绘制。
batch.begin();
for (sprite : sprites) {
    sprite.draw(batch);
}
batch.end()

实际情况会稍微复杂一些,因为精灵批处理会在其充满时以及其他一些情况下进行刷新,但一个好的经验法则是在每帧上添加你想要绘制的所有内容。

1
这正是我在寻找的,感谢您的解释。 - TypingTurtle

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