【问题标题】:Drawing shapes as textures in LibGDX在 LibGDX 中将形状绘制为纹理
【发布时间】:2014-07-23 23:07:47
【问题描述】:

我正在我的游戏中创建菜单,特别是带有圆角和边框的矩形。我可以使用形状渲染器来做到这一点,但我不能混合使用形状渲染器和精灵批处理器。目前我的分辨率似乎是使用大形状作为 PNG 并缩放它们,但在很多设备上这会产生模糊的角落。

我已经阅读了关于网格、着色器、在精灵批处理后使用形状渲染器(复杂层和性能影响)、9-patch(边界变得模糊,无法正确进行渐变)的教程

在 android 中这相当简单,我们只需在 XML 中定义形状,它创建了一个很好的清晰形状示例:带有边框和渐变的圆角矩形。

谁能给我一些建议,以及我将如何创建一个带有渐变的圆角矩形,最好是一些可以在可重用类中使用的易于使用的实现。

【问题讨论】:

  • 如果您使用过滤器(MipMapLinearLinear、Linear),您当前使用大型 PNG 形状的解决方案不会产生模糊的边缘。确保在 useMipMaps 设置为 true 的情况下加载纹理。

标签: java android opengl libgdx


【解决方案1】:

您可以将形状绘制到PixMaps,然后从中创建 TextureRegions 以使用 SpriteBatch 进行渲染。

工具集有点基本,但您可以从另一个 PixMap 绘制点、线、三角形、圆形、矩形、填充或绘制区域。

你可以画一个圆角矩形,画两个重叠的矩形,每个角画一个圆。

PixMap myPixMap = new PixMap(desiredWidth, desiredHeight, pixmapFormat);
myPixMap.setColor(myColor);
myPixMap.fillRectangle(x, y, width, height);

TextureRegion myTextureRegion = new TextureRegion(new Texture(myPixMap));

【讨论】:

  • 谢谢,我会调查的。
【解决方案2】:

你应该看看 9patches。您的用例应该与 9patches 完全相同。因此,您必须制作一个包含 9 个可分离区域的图形。

在您的情况下:4 个区域代表 4 个角,4 个区域代表您的矩形边缘和 1 个中心区域。 请记住,边缘区域和中心区域将根据矩形的大小进行拉伸,这就是为什么您不应该使用重复图案的原因。但是水平或垂直渐变应该可以正常工作。

您只能将它们与 spriteBatch 一起使用。应该没有模糊的线条,只要图形的圆角处于足够好的分辨率即可。

这是 libgdx 9patch 的链接: https://github.com/libgdx/libgdx/wiki/Ninepatches

下图显示了 Ninepatches 的基本工作原理: http://radleymarx.com/blog/wp-content/uploads/2011/05/scalable-area.png

【讨论】:

  • 问题是边框在不同分辨率下的大小不同,渐变看起来很奇怪
  • 您可以通过调用 yourninepatch.setLeftWidth / setRightWidth/ setTopHeight / setBottomHeight 等来定义您的显示尺寸,以保持不同分辨率所需的尺寸;)。只有当渐变从第一行下方开始并在最后一行之前结束时,渐变才会看起来不错。我向您展示的示例图像:radleymarx.com/blog/wp-content/uploads/2011/05/… 还包含渐变。它看起来一点也不奇怪。必须与您的图形有关。我还使用带有 ninpatches 的渐变,对我来说效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2016-10-31
  • 2019-08-04
  • 2012-11-25
相关资源
最近更新 更多