我SpriteBatch在游戏中有一个,我batch.begin()和之间batch.end()画画......
一个大的静态背景图像
几个游戏精灵
我想要剪切看到精灵的区域,我已经阅读过了ScissorStack.
问题是,ScissorStack似乎剪辑整个 SpriteBatch是在发送到GPU.结果是它剪辑了我的游戏精灵和背景图像.
题:
我必须有两个独立的batch.begin()和batch.end()周期,一个没有剪辑为背景,另一个剪报的精灵?或者有没有一种方法可以在不使用ScissorStack的情况下剪切精灵?
如果是前者,那么为了削减几个精灵,它是不是很昂贵地冲洗SpriteBatch两次,或者在性能方面真的没什么可担心的吗?
相关问题:
calculateScissors()最新源代码中的方法比我在任何地方记录的参数都多...
calculateScissors(camera, viewportX, viewportY, viewportWidth, viewportHeight, batchTransform, area, scissor)
什么viewportX, viewportY, viewportWidth, viewportHeight时候它们似乎重复了camera视口和区域信息,在任何文档中都没有提到?
基本上,我真的很困惑......即使在(或特别是之后!)测试每个参数的不同值的行为之后.
寻求任何建议.
而不是使用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();
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.