libgdx 剪切图像

Posted

技术标签:

【中文标题】libgdx 剪切图像【英文标题】:libgdx Cutting an image 【发布时间】:2014-08-08 04:19:29 【问题描述】:

一段时间以来,我一直在尝试“剪切”图像,我将解释为什么以及我尝试了什么。 所以我想创建一个 hp “bar”,但它不是一个 bar,而是一个心,所以我虽然这很容易,但我所要做的就是让两张图片将它们画在彼此的顶部,然后剪下一张来制作它显示为 hp 正在丢失,但我无法找到剪切图像的方法。

设置高度只是调整图像的大小,您可能已经猜到了 我尝试使用 textureRegion 来破解它,但效果不佳 我发现了一种名为 clip begin 的方法,它也使用剪刀,但由于某种原因,它似乎不起作用。

我可能使用的剪辑开始错误,但我真的找不到任何真正的文档,我正在做的只是:

image.clipBegin(x,y,height,weight);
image.clipEnd();

我差点忘了,我使用的是 scene2d 图像,可能是更好的解决方法,但不确定会是什么。

如果有任何关于如何做到这一点的想法,我将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

您想使用 Libgdx 公开的 OpenGL Scissor 支持。见Libgdx Clipping wiki 和Libgdx ScissorStack documentation。

API 不是特别友好(它旨在支持动态推送多个约束矩形,据我所知,它并不经常使用)。

使用剪刀堆栈要记住的重要一点是,它仅适用于发出的实际绘制命令。由于大多数 API 尝试批量绘制命令,这意味着实际绘制可能不会在看起来应该发生的时候发生。为确保发生剪裁,您必须在推动剪刀之前刷新所有缓冲的绘图(否则可能会剪裁错误的东西),并且您必须在弹出剪刀之前冲洗任何绘制调用(否则您想要剪裁的东西可能会避开剪刀)。

参见libgdx ScissorStack not working as expected 或libGDX - How to clip 或How to draw on just a portion of the screen with SpriteBatch in libgdx? 或Making a Group hide Actors outside of its bounds。

【讨论】:

以上是关于libgdx 剪切图像的主要内容,如果未能解决你的问题,请参考以下文章

纹理包装动画图像/精灵表有效-Libgdx

如何在(libgdx)阶段检测对图像透明区域的触摸?

无法加载简单的图像。 Libgdx

如何将libgdx中的图像演员旋转中点?

Atlas不按顺序渲染图像[libGDX]

LibGDX - TexturePacker2不生成/打包图像