libgdx ScissorStack не работает должным образом
Я пытаюсь создать своего рода «индикатор прогресса», но отсечение не работает так, как я ожидаю. Это то, что я делаю неправильно или что я неправильно истолковал?
draw()
рутина, которая должна обрезать:
@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();
}
}
}
Полный пример кода дляКлипТест группа учебный класс,TestScreen и скриншот.
ClipTest
это подкласс группы, используемый для демонстрации «ошибки».ClipImage
является подклассом Image, который выполняет отсечениеdraw()
.ClipTest
имеет 2 изображения, фон и передний план.Фон - это черное изображение, и оно всегда должно быть в полный размер индикатора выполнения.
Передний план - это белое изображение, ширина которого обрезается в зависимости от процента полосы.
Странный результат, который я обнаружил, заключается в том, что, хотя на переднем плане используется класс отсечения, на самом деле фоновое изображение является тем, которое обрезается.
Ожидаемый результат был создан с помощью фотошопа (так как я не мог произвести его с помощью кода).
Есть идеи, что случилось?