2016-03-08 122 views
3

我想用libGDX开发一个简单的2D侧滚动游戏。libGDX渲染TextureRegion渲染得太多

我的世界包含许多不同的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设备 - 纹理绘制正确!

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

希望我能够在一个可访问的方式来解释这个问题,你有什么想法如何解决(=如何绘制只是我想画的纹理区域)!

最好的问候

编辑:的错误并只出现在某些位置当我得出两个模块在不同位置相同的纹理,其中一人绘制正确,另一种是不。我不明白这一点。 ...

+0

我想不出解决办法,但我建议你看看LibGdx纹理打包器。一切都将被自动打包和解压缩,我不认为你会有这个奇怪的绘图问题。 –

+0

听起来像一个纹理过滤问题。无论是那样,或者你将浮点坐标转换为程序中某个地方的整数,并且意外截断(舍入),因此63.99999变为63. –

回答

3

当打包到一个tex中时,您应该始终在图像之间留出空白区域因为如果对每个像素使用FILTER_LINEAR(我认为是默认值),它将从四个最接近的像素采样。如果您的图像没有空像素填充,对于所有边缘像素,它将从邻居图像获取像素。

所以三个选项来解决你的问题:

  1. 手动在你纹理文件使用FILTER_LINEAR
  2. 停止图像之间添加空格(但你会得到难看的结果,如果你没有在本地图像dimentions绘图例如缩放图像)
  3. 使用Libgdx纹理包装机,它有一个内置功能,它要做到这一点,当你收拾你的图片
+1

非常感谢!我尝试了第三个,然后使用Texture Packer,现在所有东西都可以正常工作:)这甚至可以使我加载所有不同的纹理变得更容易,因为纹理打包器允许我对纹理进行索引:D所以非常感谢:) – WhiteStripes