但是,我有一个奇怪的问题,在绘制时,图像的外部1px似乎被拉伸以适合矩形,但是内部仅被拉伸到一定程度,我在绘制48x48的图块,但绘制了500x500平铺显示问题。 [500x500绘制良好] 最糟糕的部分似乎是,它选择何时拉伸而不是拉伸。以及要伸展什么。对不起,这很难解释,但是我附上了一张图片,希望我能做得更好。 可能只是误解了如何在spritebatch中使用平局 编辑:图块是48x48而不是64x64,我整天都在工作。
答案 0 :(得分:1)
这是因为您没有渲染“完美的像素”,这意味着您的图像未与显示器的像素网格对齐。一种快速修复方法是为纹理设置线性滤镜,因为默认情况下它使用最近的,因此屏幕上的像素将继承它可以获得的最接近的颜色。线性滤镜将插入颜色并使该线“看起来”更细。
texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
如果您正在使用Texturepacker,则可以通过更改其设置一次性完成此操作。
texturePackerSetting.filterMin = Texture.TextureFilter.Linear;
texturePackerSetting.filterMag = Texture.TextureFilter.Linear;
或者您可以通过将filter参数更改为以下内容来编辑地图集文件本身:
filter: Linear,Linear
这显然要花费更多的精力,因为它需要对绘制到屏幕上的每个像素进行更多的计算,但是在您的绘制开始遇到瓶颈之前,我不必担心。
另一种解决方案是绘制完美像素,这意味着您需要将视口设置为设备gdx.graphics.getWidth
,gdx.graphics.getHeight
的大小,即ScreenViewport
并在以下位置绘制纹理您想要的确切尺寸。当然,这意味着像素更多的屏幕可以看到更多的游戏世界,而像素较少的屏幕可以看到更多的像素,而设备的像素越多,纹理的外观就越明显。这样做的另一个缺点是,您必须忘记任何缩放或为每个缩放级别绘制精灵,以便它们再次与设备的像素网格对齐。