我想使用 libGDX 开发一个简单的 2D 横向卷轴游戏。
我的世界包含许多不同的 64x64 像素 block ,这些 block 由 SpriteBatch 使用相机绘制以适合屏幕。我的 640x640px 资源文件包含所有这些图像。 block 纹理在我的资源文件中位于 (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
现在,当我渲染我的世界时,一切似乎都很好。但是有些 block (大约 10% 的 block )被绘制为好像 TextureRegion 的矩形定位错误 - 它将上面(在资源纹理中) block 的纹理的最底部像素行绘制为其最顶部像素行。大多数 block 都正确呈现,我多次检查我是否输入了正确的位置。
奇怪的是,当我在我的电脑而不是我的安卓设备上启动游戏时,纹理绘制正确!
在搜索解决方案时,很多人会引用过滤器,但线性和最近都不适合我。 :(
希望我能够以通俗易懂的方式解释问题,并且您对如何解决这个问题有任何想法(=如何只绘制我想绘制的纹理区域)!
最好的问候
编辑: 该错误只出现在某些位置。当我在不同位置绘制两个具有相同纹理的 block 时,其中一个正确绘制而另一个不正确..我不明白....
最佳答案
当打包到一个纹理中时,您应该始终在图像之间留出空白,因为如果您对每个像素使用 FILTER_LINEAR(我认为这是默认设置),它将从四个最近的像素中采样。如果您的图像没有空像素填充,对于所有边缘像素,它将从相邻图像获取像素。
解决您的问题的三个选项:
- 在纹理文件中手动添加图像之间的空间
- 停止使用 FILTER_LINEAR(但如果您没有在原始图像尺寸中绘制,例如缩放图像,您将得到难看的结果)
- 使用 Libgdx Texture Packer,当您打包图像时,它有一个构建功能可以做到这一点
关于java - libGDX 渲染 TextureRegion 渲染太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873313/