Libgdx 接口得到额外的像素
我使用扩展视口为游戏制作了一个界面,当我调整屏幕大小时,纵横比会发生变化,场景中的每个元素都会缩放,但当发生这种情况时,我得到的是: 这是我处理过的最烦人的问题,有什么建议吗?我试着把塔楼放大n倍,然后只为视口设置更大的世界大小,但同样的事情发生了,idk图像上的额外像素是什么 我正在从atlas加载图像Libgdx 接口得到额外的像素,libgdx,Libgdx,我使用扩展视口为游戏制作了一个界面,当我调整屏幕大小时,纵横比会发生变化,场景中的每个元素都会缩放,但当发生这种情况时,我得到的是: 这是我处理过的最烦人的问题,有什么建议吗?我试着把塔楼放大n倍,然后只为视口设置更大的世界大小,但同样的事情发生了,idk图像上的额外像素是什么 我正在从atlas加载图像 new TextureRegion(skin.getAtlas().findRegion("tower0")); 地图集如下所示: skin.png size: 1024,1024 for
new TextureRegion(skin.getAtlas().findRegion("tower0"));
地图集如下所示:
skin.png
size: 1024,1024
format: RGBA8888
filter: Nearest,Nearest
repeat: none
tower0
rotate: false
xy: 657, 855
size: 43, 45
orig: 43, 45
offset: 0, 0
index: -1
在第三张图片中,您绘制的源图像略大于屏幕像素的实际大小。因此,有一些边界需要填充额外的像素,以使其填充整个屏幕大小。这里有一些方法可以解决这个问题
resize()
方法中更新它之前简单地更改了它的世界宽度和高度。像这样:
int pixelScale = Math.min(
height / MIN_WORLD_HEIGHT,
width / MIN_WORLD_WIDTH);
int worldWidth = width / pixelScale;
int worldHeight = height / pixelScale;
stretchViewport.setWorldWidth(worldWidth);
stretchViewport.setWorldHeight(worldHeight);
stretchViewport.update(width, height, true);
现在,如果你的像素比例在屏幕的宽度和高度上都不可完全分割,那么你可能仍然会有舍入瑕疵。您可能需要在计算中做更多的工作,比如将pixelScale
舍入到屏幕宽度和高度之间最接近的公共整数因子。棘手的部分是选择一个不会导致不同手机尺寸之间的“缩放”量发生巨大变化的值,但您可以通过调整桌面窗口的大小来快速测试这一点
在我的例子中,我合并了选项2和选项3。我将
worldWidth
和worldWidth
四舍五入到最接近的偶数,并将该大小用作帧缓冲区。然后,我将帧缓冲区以正确的大小绘制到屏幕上,以便从舍入中裁剪出任何额外的内容。这消除了共同因素变化的可能性。不过要复杂一点。也许有一天我会清理代码并发布它。你能展示一下你是如何加载图像的吗?我只是从atlas新的纹理区域(skin.getAtlas().findRegion(“tower0”))加载纹理。
然后绘制它,你能展示atlas吗?特别是过滤器。@icarumbas我编辑的第一篇文章添加了atlas partI当时不知道。我对线性过滤器也有同样的问题,通过更改为“最近”来解决。尝试更改过滤器没有发现区别,我正在考虑编写视口,但idk从何处开始,您编写了吗?如果你这样做了,也许你会分享它的来源