libGDX渲染TextureRegion渲染太多

时间:2016-03-08 16:55:22

标签: java android libgdx

我想用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设备 - 纹理被正确绘制!

在搜索解决方案时,很多人都会参考过滤器,但线性和最近都不适用于我。 :(

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

祝你好运

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

1 个答案:

答案 0 :(得分:4)

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

解决问题的三个选项:

  1. 在纹理文件中的图像之间手动添加空间
  2. 停止使用FILTER_LINEAR(但如果您没有绘制原始图像尺寸,例如缩放图像,则会得到难看的结果)
  3. 使用Libgdx纹理包装器,当你打包图像时,它具有构建它的功能