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

时间:2015-05-05 06:04:59

标签: libgdx

标题说明了一切。

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

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

  
      
  1. 开始批处理
  2.   
  3. 绘制背景
  4.   
  5. 结束批次
  6.   
  7. 致电所有舞台抽奖
  8.   

如果您的答案是:spritebatch将在一个批处理中绘制多个阶段,那么我可以说将每个sprite作为成员放到Actor对象然后将所有Actor对象添加到Stage对象更高效,然后打电话给舞台画。通过这种方式,我可以最大限度地减少开始批量和结束批次的调用,这可以提高我所知道的性能。

1 个答案:

答案 0 :(得分:5)

查看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(),这会产生平局调用。
因此,它不一定会减少绘制调用的数量。只要你没有性能问题,也不要过多考虑性能。如果其他解决方案接缝更清洁",我认为不值得改变它 在使用多个Batch时,要记住一个重要的事情是,在为另一个调用end()之前调用begin()。你永远不应该有2 Batch es"运行"在同一时间。