我创建了一个非常简单的图,可以通过在屏幕的右侧添加新图像,然后使它们向左侧移动来动态更新。这样,屏幕范围内的绘图就好像随着时间的流逝而绘制一样。
不幸的是,以这种方式执行操作时,我必须让图像从屏幕外开始并进入视图,并且在图像完全位于屏幕的左侧之前,我无法再次将其删除。这导致图像在屏幕边界之外部分可见。
控件创建为Group,其中包含两个静态图像(黑色背景,屏幕图像作为前景),以及介于两者之间的所有运动图像。这Group是然后添加到我的Stage(像所有其他演员),并绘制成的一部分Stage。
在下图中,控件的边界标记为红色。我想隐藏运动图像中超出这些范围的部分。使用我错过的某些libGDX功能可以做到这一点吗?通过某种方式限制小组的绘图区域?
屏幕的工作方式说明。
我的其他替代方法是在屏幕前面绘制蓝色背景的一部分,以隐藏离群值,或者使屏幕的边缘足够厚以隐藏它们。我认为这两种解决方案都不必要地带来不便,而且我敢肯定,有更好的方法可以做到这一点。
有什么建议么?
解决方案是使用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(); }