libGDX - 如何剪辑

Bum*_*mpy 7 clipping libgdx

SpriteBatch在游戏中有一个,我batch.begin()和之间batch.end()画画......

  1. 一个大的静态背景图像

  2. 几个游戏精灵

我想要剪切看到精灵的区域,我已经阅读过了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视口和区域信息,在任何文档中都没有提到?

基本上,我真的很困惑......即使在(或特别是之后!)测试每个参数的不同值的行为之后.

寻求任何建议.

Jac*_*unt 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();
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.