【发布时间】: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。