我想用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的矩形定位错误 - 它将上面(在资源纹理中)块的纹理中最底部的像素行绘制为其最顶部的像素行。大多数块都正确渲染,我检查我多次进入正确的位置。
奇怪的是,当我在计算机上启动游戏时 - 而不是我的Android设备 - 纹理被正确绘制!
在搜索解决方案时,很多人都会参考过滤器,但线性和最近都不适用于我。 :(
希望我能够以一种易于理解的方式解释问题,你有任何想法如何解决(=如何只绘制我想要绘制的纹理区域)!
祝你好运
编辑:该错误仅出现在某些位置。当我在不同的位置绘制两个具有相同纹理的块时,其中一个被正确绘制而另一个不是..我不明白....
答案 0 :(得分:4)
在打包到一个纹理时,您应该始终在图像之间留下空白区域,因为如果您对每个像素使用FILTER_LINEAR(我认为是默认值),它将从最近的四个像素中采样。如果您的图像没有空像素填充,对于所有边缘像素,它将从邻居图像中获取像素。
解决问题的三个选项: