LibGDX:非投影世界坐标如何工作?

LibGDX: How does unprojecting world coordinates work?

我在理解这一点时在概念层面上遇到了问题,因为大多数 articles/questions 没有深入。

我知道相机会像真实相机一样聚焦游戏世界的一部分。

那么世界坐标就是世界的coordinates/measurements,对吗?和屏幕坐标是屏幕的坐标(无论是 phone 还是桌面启动器),对吧?视口是否同时处理世界 size/coordinates 和预期的屏幕 size/coordinates?

每当我使用 unproject 方法时,无论是通过调用 viewport.unproject 还是 camera.unproject(使用 Gdx.input.getX()Gdx.input.getY() 作为 Vector3 unproject 方法的参数),没有其他变化。

我想要的游戏宽度和高度是 136 和 204(纵横比)。我有 "if x >32 ...." 之类的方法,但显然会产生问题,因为当我 运行 在不同的设备(甚至我的桌面启动器)上使用它时,32 处的坐标非常不同。我如何使它相同?这就是unproject方法解决的问题吗?

它应该如何运作?它的设计是为了让我在屏幕上的任何地方触摸,触摸都会映射到我触摸过的世界上的任何东西吗?

通常我会这样称呼:

Gdx.app.log("x", Gdx.input.getX() + "");
Gdx.app.log("y", Gdx.input.getY() + "");

但是当我调用 unproject 方法时,坐标保持不变。我是不是理解错了?

只使用 box2d 演员会更好吗?或者我会遇到同样的问题吗?

你必须这样使用它:

Vector3 touch;

cam.unproject(touch.set(Gdx.input.getX(), Gdx.input.getY(), 0));

然后 touch.xtouch.y 是您未投影的坐标。