libgdx ScissorStack não está funcionando como esperado
Estou tentando criar uma espécie de "barra de progresso", mas o recorte não parece funcionar da maneira que eu esperava. Isso é algo que estou fazendo de errado ou algo que eu interpretei errado?
odraw()
rotina que deve cortar:
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
Rectangle scissors = new Rectangle();
Rectangle clipBounds = new Rectangle(getX(), getY(), getWidth() * 0.75f, getHeight());
ScissorStack.calculateScissors(
getStage().getCamera(),
getStage().getGutterWidth(),
getStage().getGutterHeight(),
getStage().getCamera().viewportWidth,
getStage().getCamera().viewportHeight,
batch.getTransformMatrix(),
clipBounds, scissors);
if (ScissorStack.pushScissors(scissors)) {
super.draw(batch, parentAlpha);
ScissorStack.popScissors();
}
}
}
Código de amostra completo paraGrupo ClipTest classe,TestScreen e captura de tela.
ClipTest
é uma subclasse de grupo usada para demonstrar o "bug".ClipImage
é uma subclasse de Image, que executa o recorte emdraw()
.ClipTest
tem 2 imagens, plano de fundo e primeiro plano.O plano de fundo é uma imagem em preto e sempre deve ser do tamanho total da barra de progresso.
O primeiro plano é uma imagem em branco e a largura é cortada dependendo da porcentagem da barra.
O resultado estranho que encontrei é que, embora o primeiro plano esteja usando a classe de recorte, a imagem de plano de fundo é aquela realmente cortada.
O resultado esperado foi criado usando o photoshop (como eu não poderia produzi-lo via código).
Alguma idéia do que está errado?