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

pau*_*ulj 2 libgdx

标题说明了一切.

Stage使用同一个SpriteBatcher对象调用多个draw()方法只发生在一个批处理中,还是一个Stage=一个批处理?

我有一种情况,我不想使用演员作为游戏的背景,我只是直接绘制它.但算法看起来像这样.

  1. 开始批量
  2. 画背景
  3. 最终批次
  4. 打电话给所有舞台画

如果您的答案是:spritebatch将在一个批处理中绘制多个阶段,那么我可以说将每个sprite作为成员放入Actor对象然后将所有Actor对象添加到Stage对象,然后调用阶段更有效画.这样,我可以最小化开始批量和结束批次的调用,这可以提高我所知道的性能.

Spr*_*bua 5

综观StageS码,好像它调用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();
}
Run Code Online (Sandbox Code Playgroud)

因此,将Actors 添加到Stage可能会减少绘制调用.
但请记住,如果Batch已满,则flush()无论如何它都将被编辑,这会导致绘制调用.
因此,它不一定会减少绘制调用的数量.只要你没有性能问题,也不要考虑性能.如果其他解决方案接缝"更清洁",我想这不值得改变它.
记住一个重要的事情,就是在与另一个人Batch打电话end()之前,先召集一个人begin().你永远不应该同时Batch"运行".

  • 在调用`flush()`之前,使用默认构造函数,`SpriteBatch`可以包含1000个Sprite.您可以通过使用带有`int size`的构造函数来增加该大小,最大值为5460.您可以阅读此处[here](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx /graphics/g2d/SpriteBatch.html#SpriteBatch-int-com.badlogic.gdx.graphics.glutils.ShaderProgram-) (3认同)