坐标 (0, 0) 与 LibGDX Camera/Viewport 相差 1 个像素

Coordinate (0, 0) is 1 pixel off with LibGDX Camera/Viewport

希望标题不会太混乱,但我是 LibGDX 的新手,在 Google 上搜索了几个小时后,我终于让相机和视口正常工作,它现在可以正确缩放到屏幕。还有一个问题,y坐标0是正确的,x坐标0好像错了1/几个像素,我不好描述,所以上一张图:Link to image

正如我所说,我是 LibGDX 的新手,我猜这是一个非常明显的错误,但这是我使用的代码:

我使用这些变量:

public static final int WORLD_WIDTH = 480;
public static final int WORLD_HEIGHT = 800;
OrthographicCamera cam;
Viewport viewport;
SpriteBatch batch;
Texture img;

我在 create() 中有这个:

cam = new OrthographicCamera(WORLD_WIDTH, WORLD_HEIGHT);
cam.setToOrtho(false, WORLD_WIDTH, WORLD_HEIGHT);
viewport = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT);
img = new Texture("badlogic.jpg");

我在 render() 中有这个:

batch.setProjectionMatrix(cam.combined); //Important

在 render() 的更下方,我有这段代码:

batch.begin();
batch.draw(img, 0, 0);
batch.end();

我在 resize() 中有这个:

viewport.update(width, height);

其中给出了图片的结果。

是否有解决此问题的方法,我是否需要更改部分代码、添加一些新行或者是否有更智能的方法来执行 camera/viewport?

我期待着您的回答,提前致谢。

干杯!

大约一年前,我开发了一个 full LibGDX game tutorial and provided code that was reusable for any game you'd want to create. I included a dynamic Camera which handled the aspect ratio and resolution perfectly. You can take a look at the code for the camera here 并确定它与你的相似之处以及是否可以做任何事情来改进你的相机。

你正在经历的是它应该是的方式。您正在使用 FitViewport 和 "virtual" 分辨率。 FitViewport 保持给定视口大小的纵横比,同时放大或缩小以填充您的游戏 window。如果您的 window 没有与虚拟分辨率相同的宽高比,FitViewport 将导致您的 window 的部分成为 "empty" (这意味着只有 glClear-color ).

看看 Viewports wiki page,您可以在其中以更极端的方式看到这种行为。

如果你不想这样,你可以用"opposite" FillViewport试试(没有空白区域,但有些部分可能会被切掉,因为它们是"outside"的你的 window),一个 ScreenViewport(适合 UI),或者一个 ExtendViewport.