spritebatch 是否用一个批次绘制多个阶段? Libgdx

does the spritebatch draws multiple stages with a single batch? Libgdx

标题说明了一切。

使用相同的 SpriteBatcher object 调用多个 Stages draw() 方法只发生在一个批次中还是一个 Stage = 一个批次?

我有一种情况不想用演员做游戏背景,我直接画了。但是算法看起来像这样。

  1. begin batch
  2. draw background
  3. end batch
  4. call all stage draw

如果你的回答是:spritebatch会在一批中绘制多个阶段,那么我可以说将每个精灵作为一个Actor的成员object然后添加所有Actorobject到舞台object,然后调用舞台抽签。这样,我可以最大限度地减少开始批处理和结束批处理的调用,据我所知,这可以提高性能。

查看 Stages code,它似乎调用了 batch.begin()batch.end()

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();
}

因此,将您的 Actor 添加到 Stage 可能会减少绘图调用。
但请记住,如果 Batch 已满,无论如何都会 flush()ed,这会导致绘制调用。
所以它不一定会减少绘制调用的数量。也不要过多考虑性能,只要你没有性能问题。如果其他解决方案接缝"cleaner",我想不值得改变它。
要记住的一件重要事情是,当使用多个 Batch 时,先为一个调用 end(),然后再为另一个调用 begin()。你不应该同时拥有 2 Batches "running"。