我编写某种棋盘游戏。物体应该能够从那块板上滑下来。这意味着不应再显示在该特定区域之外的对象部分,以使其看起来好像该物品正在移出棋盘。
我试过的是检查精灵是否仍然在板上(通过检查位置),如果不是,我不再渲染它了。但那是
1)糟糕,因为Sprite完全显示或根本不显示。
2)不优雅。
实现上述目标的优雅方法是什么?也许使用图像而不是精灵,然后让另一个阶段的视口只是屏幕的一部分?如果是这样,我会对如何做到这一点的解释感到高兴。
答案 0 :(得分:4)
您可以使用剪辑。它基本上做的是你定义一个矩形区域,将它与spritebatch相关联。你应用剪刀,只会画出与spritebatch相关的矩形内部区域。
来自Wiki的示例代码(版本0.9.9之前):
Rectangle scissors = new Rectangle();
Rectangle clipBounds = new Rectangle(x,y,w,h);
ScissorStack.calculateScissors(camera, spriteBatch.getTransformMatrix(), clipBounds, scissors);
ScissorStack.pushScissors(scissors);
spriteBatch.draw(...);
spriteBatch.flush();
ScissorStack.popScissors();
来源:https://github.com/libgdx/libgdx/wiki/Clipping%2C-with-the-use-of-scissorstack
-
修改强> 对于LibGDX版本0.9.9,函数calculateScissors的参数似乎发生了变化。 NathanSweet帮助我弄清楚如何使它工作(CalculateScissors with ViewPorts)然后重新引入上面提到的功能(CalculateScissors Less Parameters)。
ScissorStack.calculateScissors(camera, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), batch.getTransformMatrix(), clipBounds, scissor);