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