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

标签 java android libgdx sprite

我编写了某种棋盘游戏。物体应该能够从板上滑落。这意味着该指定区域之外的对象部分不应再显示,以使该项目看起来好像正在从棋盘上移开。

我尝试的是检查 Sprite 是否仍在棋盘上(通过检查位置),如果不是,我将不再渲染它。但那是

1) 不好,因为这样 Sprite 要么完全显示,要么根本不显示。

2)不优雅。

实现我上面描述的目标的优雅方法是什么?也许使用图像而不是 Sprite ,然后使用另一个舞台,其视口(viewport)只是屏幕的一部分?如果是这样,我很高兴能得到一些关于如何做到这一点的解释。

最佳答案

您可以使用剪辑。它的基本作用是定义一个矩形区域并将其与 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);

关于java - LibGDX:仅在特定区域内显示 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661139/

相关文章:

java - 如何使用已声明的事实类型动态重新加载规则?

java - 根据 2 个输入参数的子类型更改方法行为

java - 使用 RxJava 2 进行安卓测试

android - Dagger-Hilt:@ViewModelInject 没有注入(inject) MyViewModel 并崩溃?

java - 使用 Scene2D 在 Libgdx 中移动 Sprite (Actor?)

java - 在 libgdx 中拉伸(stretch)/压缩图像

java - 为什么我不需要导入 android "R"类?

java - Android截击奇怪的错误

java - Box2D 让重力影响不同的质量

android - Appium Android 按钮点击不起作用?