坐标 (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
.
希望标题不会太混乱,但我是 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
.