使一个组隐藏在其边界之外的Actor

时间:2013-07-10 13:09:55

标签: grouping libgdx

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

不幸的是,当这样做的时候,我必须让图像从屏幕外面开始,然后进入视图,我不能再将它们移除,直到它们完全位于左侧的屏幕之外。这导致图像在屏幕边界之外部分可见。

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

在下图中,控件的边界标有红色。我想隐藏这些边界之外的运动图像部分。这是否可以使用我错过的一些libGDX功能?通过某种方式限制集团的绘图区域,也许?

An illustration of how the screen works.

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

有什么建议吗?

1 个答案:

答案 0 :(得分:11)

解决方案是使用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();
}