我的游戏中有一个SpriteBatch
,我在batch.begin()
和batch.end()
之间绘制...
大型静态背景图片
几个游戏精灵
我想剪切看到精灵的区域,我已经阅读了ScissorStack
。
问题是ScissorStack
似乎会剪切发送到GPU的整个 SpriteBatch
。结果是它剪辑了我的游戏精灵和背景图片。
问题:
我必须有两个单独的batch.begin()
和batch.end()
周期,一个没有裁剪背景,另一个有精灵剪裁吗?或者有没有一种方法可以在不使用ScissorStack的情况下剪切精灵?
如果是前者,那么为了削减一些精灵,它是不是很昂贵地冲洗SpriteBatch两次,或者在性能方面真的没什么可担心的?
相关问题:
最新源代码中的calculateScissors()
方法有比我在任何地方记录的参数更多的参数......
calculateScissors(camera, viewportX, viewportY, viewportWidth, viewportHeight, batchTransform, area, scissor)
viewportX, viewportY, viewportWidth, viewportHeight
在复制camera
的视口和区域信息时是什么目的,并且在任何文档中都没有提及?
基本上,我真的很困惑......甚至在测试了每个参数的不同值的行为之后(或特别是之后!)。
寻求任何建议。
答案 0 :(得分:5)
而不是使用ScissorStack我使用glScissor来获得我需要的结果。
@Override
public void render(float delta) {
GameStage.INSTANCE.act(Gdx.graphics.getDeltaTime());
GameStage.INSTANCE.setViewport(GameGeometry.width, GameGeometry.height,
true);
GameStage.INSTANCE.getCamera().translate(
-GameStage.INSTANCE.getGutterWidth(),
-GameStage.INSTANCE.getGutterHeight(), 0);
Gdx.gl.glScissor(
(int) GameStage.INSTANCE.getGutterWidth() * 2,
(int) GameStage.INSTANCE.getGutterHeight(),
(int) Gdx.graphics.getWidth()
- (int) (GameStage.INSTANCE.getGutterWidth() * 4),
(int) Gdx.graphics.getHeight());
Gdx.gl.glDisable(GL10.GL_SCISSOR_TEST);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Gdx.gl.glEnable(GL10.GL_SCISSOR_TEST);
GameStage.INSTANCE.draw();
}
希望这有帮助。