Java Libgdx Spritebatch错误

Java Libgdx Spritebatch错误,java,graphics,libgdx,2d,Java,Graphics,Libgdx,2d,然而,我有一个奇怪的问题,当绘制时,似乎图像的外部1px被拉伸以适合矩形,但内部仅被拉伸到一个延伸,我绘制的是48x48瓷砖,但绘制了500x500瓷砖以显示该问题。[500x500抽签罚款] 最糟糕的部分似乎是,它选择何时拉伸,何时不拉伸。还有要撒播什么。很抱歉,这很难解释,但我附上了一张图片,我希望它能做得更好。 这可能只是误解了如何使用spritebatch的平局 编辑:平铺是48x48而不是64x64,我刚刚工作了一整天。这是因为您没有呈现“像素完美”,这意味着您的图像与显示器的像素网格

然而,我有一个奇怪的问题,当绘制时,似乎图像的外部1px被拉伸以适合矩形,但内部仅被拉伸到一个延伸,我绘制的是48x48瓷砖,但绘制了500x500瓷砖以显示该问题。[500x500抽签罚款] 最糟糕的部分似乎是,它选择何时拉伸,何时不拉伸。还有要撒播什么。很抱歉,这很难解释,但我附上了一张图片,我希望它能做得更好。 这可能只是误解了如何使用spritebatch的平局
编辑:平铺是48x48而不是64x64,我刚刚工作了一整天。

这是因为您没有呈现“像素完美”,这意味着您的图像与显示器的像素网格不一致。一个快速修复方法可能是为纹理设置线性过滤器,因为默认情况下,它使用最接近的颜色,因此屏幕上的像素将继承它可以获得的最接近的颜色。线性过滤器将插值颜色,使线条“看起来”更细

如果您使用的是texturepacker,您可以通过更改其设置一次性完成此操作

texturePackerSetting.filterMin = Texture.TextureFilter.Linear;
texturePackerSetting.filterMag = Texture.TextureFilter.Linear;
也可以通过将过滤器参数更改为以下值来编辑atlas文件本身:

filter: Linear,Linear
这显然需要更高的功耗,因为它需要对屏幕上绘制的每个像素进行更多的计算,但我不会担心这一点,直到您的绘图开始出现瓶颈


另一个解决方案是绘制像素完美,这意味着您需要将视口设置为设备的大小
gdx.graphics.getWidth
gdx.graphics.getHeight
,换句话说,就是一个
ScreenViewport
,并按照您想要的大小绘制纹理。当然,这意味着像素越多的屏幕可以看到更多的游戏世界,而像素越少的屏幕和像素越多的设备,你的纹理看起来就越小。另一个缺点是,您必须忘记任何缩放或为每个缩放级别绘制精灵,以便它们再次与设备的像素网格对齐。

第三个选项是将1:1绘制到帧缓冲区,而不是使用放大着色器将帧缓冲区的纹理绘制到屏幕上(这样可以减少线性缩放所产生的模糊度)。@Tenfour04有趣的是,您介意添加更多细节作为答案吗?非常感谢madmenyo.:)texture.setFilter(texture.TextureFilter.linear,texture.TextureFilter.linear);我帮不了我那么多。也没有使用线性的texutre地图集。我的视口保持了这个比例,这有点帮助,但我今天尝试帧缓冲区。无论是否有帮助,我都会更新。:)
filter: Linear,Linear