【问题标题】:libGDX rendering TextureRegion renders too muchlibGDX 渲染 TextureRegion 渲染太多
【发布时间】:2016-06-22 17:58:24
【问题描述】:

我想使用 libGDX 开发一个简单的 2D 横向滚动游戏。

我的世界包含许多不同的 64x64 像素块,这些块由 SpriteBatch 使用相机绘制以适应屏幕。我的 640x640px 资源文件包含所有这些图像。在我的资源文件中,块纹理位于 (0, 0), (0, 64), (64, 0), ... 等等。 当我的应用启动时,我会加载纹理并创建许多不同的 TextureRegions:

    texture = new Texture(Gdx.files.internal("texture.png"));
    block = new TextureRegion(texture, 0, 0, 64, 64);
    block.flip(false, true);
    // continue with the other blocks

现在,当我渲染我的世界时,一切似乎都很好。但是有些块(大约我的块的 10%)被绘制为好像 TextureRegion 的矩形定位错误 - 它绘制了上面(在资源纹理中)块的纹理的最底部像素行作为其最顶部像素行。大多数块都正确渲染,我多次检查是否输入了正确的位置。

奇怪的是,当我在我的电脑上启动游戏时——而不是我的安卓设备——纹理被正确绘制了!

在搜索解决方案时,很多人都会参考过滤器,但 Linear 和 Nearest 都不适合我。 :(

希望我能够以一种易于理解的方式解释该问题,并且您对如何解决该问题有任何想法(= 如何仅绘制我想要绘制的纹理区域)!

最好的问候

编辑:该错误仅出现在某些位置。当我在不同位置绘制两个具有相同纹理的块时,其中一个绘制正确,另一个不正确..我不明白....

【问题讨论】:

  • 我想不出解决方案,但我建议您查看 LibGdx Texture Packer。一切都会自动打包和解包,我认为你不会有这种奇怪的绘图问题。
  • 听起来像是纹理过滤问题。要么是这样,要么你在程序中的某个地方将浮点坐标转换为整数并意外截断(向下舍入),所以 63.99999 变成了 63。

标签: java android libgdx


【解决方案1】:

在打包成一个纹理时,您应该始终在图像之间留出空白空间,因为如果您对每个像素使用 FILTER_LINEAR(我认为这是默认设置),它将从最近的四个像素中采样。如果您的图像没有空像素填充,则对于所有边缘像素,它将从相邻图像中获取像素。

所以三个选项可以解决您的问题:

  1. 在纹理文件中的图像之间手动添加空格
  2. 停止使用 FILTER_LINEAR(但如果您没有在原生图像尺寸中绘制,例如缩放图像,您会得到难看的结果)
  3. 使用 Libgdx Texture Packer,它有一个 build it 功能,可以在您打包图像时做到这一点

【讨论】:

  • 非常感谢!我尝试了第三个并使用了纹理打包器,现在一切对我来说都很好:) 这甚至使加载我所有不同的纹理变得更加容易,因为纹理打包器允许我索引我的纹理:D 所以非常感谢:)
猜你喜欢
  • 2017-11-17
  • 2015-07-04
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2015-08-03
相关资源
最近更新 更多