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.x
和 touch.y
是您未投影的坐标。
我在理解这一点时在概念层面上遇到了问题,因为大多数 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.x
和 touch.y
是您未投影的坐标。