标题说明了一切。
使用相同的Stage
对象调用多个SpriteBatcher
的draw()方法只发生在一个批处理中,还是一个Stage
=一个批处理?
我有一种情况,我不想使用演员作为游戏的背景,我只是直接画它。但算法看起来像这样。
- 开始批处理
- 绘制背景
- 结束批次
- 致电所有舞台抽奖
醇>
如果您的答案是:spritebatch将在一个批处理中绘制多个阶段,那么我可以说将每个sprite作为成员放到Actor对象然后将所有Actor对象添加到Stage对象更高效,然后打电话给舞台画。通过这种方式,我可以最大限度地减少开始批量和结束批次的调用,这可以提高我所知道的性能。
答案 0 :(得分:5)
查看Stage
s 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"运行"在同一时间。