spritebatch是否使用单个批次绘制多个阶段?Libgdx
标题说明了一切 使用相同的spritebatch是否使用单个批次绘制多个阶段?Libgdx,libgdx,Libgdx,标题说明了一切 使用相同的SpriteBatcher对象调用多个Stages draw()方法是只在一个批中发生,还是一个Stage=一个批 我不想用演员作为游戏的背景,我只是直接画出来。但是算法看起来是这样的 开始批量 画背景 终批 全场抽签 如果您的答案是:spritebatch将在一批中绘制多个舞台,那么我可以说,将每个精灵作为演员对象的成员,然后将所有演员对象添加到舞台对象,然后调用舞台绘制更有效。通过这种方式,我可以最小化对begin batch和end batch的调用,据我所知,这
SpriteBatcher
对象调用多个Stage
s draw()方法是只在一个批中发生,还是一个Stage
=一个批
我不想用演员作为游戏的背景,我只是直接画出来。但是算法看起来是这样的
batch.begin()
和batch.end()
:
因此,将您的Actor
s添加到Stage
可能会减少抽签调用。但是请记住,如果批处理
已满,它将被flush()
ed,这将导致一个draw调用。
因此,它不一定会减少draw调用的数量。另外,只要没有性能问题,就不要过分考虑性能。如果其他解决方案“更干净”,我想不值得改变它。
在处理多个批处理时,需要记住的一件重要事情是,在调用另一个begin()
之前,先调用一个end()
。您不应该让2个批处理同时运行。谢谢。我不知道批处理是否已满。在调用flush()
之前,使用默认构造函数,SpriteBatch
可以包含1000个Sprite
s。您可以使用带有int size
的构造函数来增加该大小,这里的最大值是5460。你可以看这个谢谢。你太棒了。我感谢你的回答。我不明白为什么root
和viewport
类的Stage
成员是private
而不是protected
。我们可以通过扩展Stage
类来覆盖draw
方法。我测试了它,将整个scene2d导入到我的项目中,并删除了Stage
类的draw
方法中的batch.begin()
和batch.end()中的batch.end()
。帧率甚至1FPS也没有改变。所以别担心,在帧速率降至60 FPS以下之前,现代低端手机可以打大约50个抽奖电话。当然,还有其他因素会影响到这一点,但几乎可以肯定的是,保存一个draw调用不值得让代码复杂化。伟大的谢谢,还有一件事。默认情况下,libgdx中的按钮和表也会导致批处理刷新,因此,除非调用setTransform(false),否则每个按钮和表都会得到一个额外的draw调用;在它们上,只要不打算缩放或旋转它们,就可以了。如果你用了很多按钮,这些真的可以加起来。
public void draw () {
Camera camera = viewport.getCamera();
camera.update();
if (!root.isVisible()) return;
Batch batch = this.batch;
if (batch != null) {
batch.setProjectionMatrix(camera.combined);
batch.begin();
root.draw(batch, 1);
batch.end();
}
if (debug) drawDebug();
}