twi*_*wig 3 java clipping libgdx
我正在尝试创建各种各样的"进度条",但裁剪似乎不像我期望的那样工作.这是我做错了什么或者我误解了什么?
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
完成ClipTest组类,TestScreen和屏幕截图的示例代码.

ClipTest 是用于演示"bug"的组的子类.ClipImage是Image的子类,它执行剪切draw().ClipTest 有2张图片,背景和前景.背景是黑色图像,它应始终是进度条的完整大小.
前景是白色图像,其宽度根据条形图的百分比进行裁剪.
我发现的奇怪结果是,虽然前景是使用剪辑类,但背景图像是实际剪切的图像.
预期的结果是使用photoshop创建的(因为我无法通过代码生成它).
知道什么是错的吗?
实际绘图直到批处理"刷新"才会发生,它不是draw你需要包装的调用,因为它只是将绘图排队等待以后完成.
你需要确保在启用和禁用剪刀之间进行OpenGL绘图调用,所以在flush之后添加一个draw.请参阅
https://github.com/libgdx/libgdx/wiki/Clipping,-with-the-use-of-scissorstack
由于draw调用可能会导致刷新,因此您需要将draw调用保留在active-scissor区域内.您可能还需要在启动活动剪刀区域之前刷新或结束批处理,以防止在剪刀开始在活动剪刀区域内刷新之前排队的绘制调用.
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |