spritebatch 是否用一个批次绘制多个阶段? Libgdx
does the spritebatch draws multiple stages with a single batch? Libgdx
标题说明了一切。
使用相同的 SpriteBatcher
object 调用多个 Stage
s draw() 方法只发生在一个批次中还是一个 Stage
= 一个批次?
我有一种情况不想用演员做游戏背景,我直接画了。但是算法看起来像这样。
- begin batch
- draw background
- end batch
- call all stage draw
如果你的回答是:spritebatch会在一批中绘制多个阶段,那么我可以说将每个精灵作为一个Actor的成员object然后添加所有Actorobject到舞台object,然后调用舞台抽签。这样,我可以最大限度地减少开始批处理和结束批处理的调用,据我所知,这可以提高性能。
查看 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()
ed,这会导致绘制调用。
所以它不一定会减少绘制调用的数量。也不要过多考虑性能,只要你没有性能问题。如果其他解决方案接缝"cleaner",我想不值得改变它。
要记住的一件重要事情是,当使用多个 Batch
时,先为一个调用 end()
,然后再为另一个调用 begin()
。你不应该同时拥有 2 Batch
es "running"。
标题说明了一切。
使用相同的 SpriteBatcher
object 调用多个 Stage
s draw() 方法只发生在一个批次中还是一个 Stage
= 一个批次?
我有一种情况不想用演员做游戏背景,我直接画了。但是算法看起来像这样。
- begin batch
- draw background
- end batch
- call all stage draw
如果你的回答是:spritebatch会在一批中绘制多个阶段,那么我可以说将每个精灵作为一个Actor的成员object然后添加所有Actorobject到舞台object,然后调用舞台抽签。这样,我可以最大限度地减少开始批处理和结束批处理的调用,据我所知,这可以提高性能。
查看 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()
ed,这会导致绘制调用。
所以它不一定会减少绘制调用的数量。也不要过多考虑性能,只要你没有性能问题。如果其他解决方案接缝"cleaner",我想不值得改变它。
要记住的一件重要事情是,当使用多个 Batch
时,先为一个调用 end()
,然后再为另一个调用 begin()
。你不应该同时拥有 2 Batch
es "running"。