6

我创建了一个非常简单的绘图,它通过在屏幕右侧添加新图像,然后使它们向左侧移动来动态更新。这样,屏幕范围内的情节看起来就像是随着时间的推移而绘制的。

不幸的是,这样做时,我必须让图像从屏幕之外开始,然后移动到视图中,并且在它们完全位于左侧屏幕之外之前,我无法再次删除它们。这导致图像在屏幕边界之外部分可见。

该控件被创建为Group包含两个静态图像(黑色背景和作为前景的屏幕图像)以及其间的所有运动图像的控件。然后Group将其添加到我的Stage(像所有其他演员一样),并作为Stage.

在下图中,控件的边界用红色标记。我想隐藏超出这些范围的运动图像部分。使用我错过的一些 libGDX 功能可以做到这一点吗?也许是通过某种方式限制了 Group 的绘图区域?

屏幕如何工作的插图。

我的其他选择是在屏幕前绘制蓝色背景的一部分,隐藏异常值,或者使屏幕边缘足够厚以隐藏它们。我认为这两种解决方案都不必要地不方便,而且我很确定有更好的方法来做到这一点。

有什么建议么?

4

1 回答 1

12

解决方案是使用ScissorStack

@Override
public void draw(SpriteBatch batch, float parentAlpha) {

    //Create a scissor recangle that covers my Actor.
    Rectangle scissors = new Rectangle();
    Rectangle clipBounds = new Rectangle(getX(),getY(),getWidth(),getHeight());
    ScissorStack.calculateScissors(camera, batch.getTransformMatrix(), clipBounds, scissors);
    batch.flush(); //Make sure nothing is clipped before we want it to.
    ScissorStack.pushScissors(scissors);

    //Draw the actor as usual
    super.draw(batch, parentAlpha);

    //Perform the actual clipping
    ScissorStack.popScissors();
}
于 2013-07-10T18:16:06.913 回答