LibGDX:仅在特定区域内显示Sprite

时间:2014-02-09 15:42:59

标签: java android libgdx sprite

我编写某种棋盘游戏。物体应该能够从那块板上滑下来。这意味着不应再显示在该特定区域之外的对象部分,以使其看起来好像该物品正在移出棋盘。

我试过的是检查精灵是否仍然在板上(通过检查位置),如果不是,我不再渲染它了。但那是

1)糟糕,因为Sprite完全显示或根本不显示。

2)不优雅。

实现上述目标的优雅方法是什么?也许使用图像而不是精灵,然后让另一个阶段的视口只是屏幕的一部分?如果是这样,我会对如何做到这一点的解释感到高兴。

1 个答案:

答案 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);