Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX鼠标在世界中的位置偏差_Java_Libgdx_Mouse Position - Fatal编程技术网

Java LibGDX鼠标在世界中的位置偏差

Java LibGDX鼠标在世界中的位置偏差,java,libgdx,mouse-position,Java,Libgdx,Mouse Position,我在LibGDX的游戏世界中遇到了一些鼠标位置问题。 我的鼠标在世界上的位置和真实位置有些不同。 要获取我的鼠标位置,请使用: Vector3 mousePos = gamecam.unproject(new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0)); speechBaloon.setPosition(mousePos.x, mousePos.y); //texture that follows cursor 其中: public stat

我在LibGDX的游戏世界中遇到了一些鼠标位置问题。 我的鼠标在世界上的位置和真实位置有些不同。 要获取我的鼠标位置,请使用:

Vector3 mousePos = gamecam.unproject(new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0));
speechBaloon.setPosition(mousePos.x, mousePos.y); //texture that follows cursor
其中:

public static final int WIDTH = 1920;
public static final int HEIGHT = 1080;


gamecam = new OrthographicCamera();
gamePort = new FitViewport(MyGame.WIDTH, MyGame.HEIGHT, gamecam);
gamecam.setToOrtho(false, MyGame.WIDTH, MyGame.HEIGHT);
这里有一些照片(我自己添加的,因为我的屏幕程序没有使用光标捕捉照片的选项,但保留了距离之间的比例):

正如你在img2中看到的,X位置和Y位置之间存在差异。我不能发布超过2张照片,但当我将光标从img1拖动到Y轴的中心时,我的纹理和光标正在覆盖自己

我有调整大小的功能(我的类实现屏幕)

提前感谢您的帮助

只要(
gamePort
)被使用,我们就需要调用Viewport实例

从LibGDX的文档中:

函数将屏幕坐标中给定的点转换为世界坐标 空间 假定视口跨越整个屏幕,并从中提取 和


最后结果:

Vector3 mousePos = gamePort.unproject(new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0));
speechBaloon.setPosition(mousePos.x, mousePos.y); //texture that follows cursor

由于您使用的是视口,因此需要使用视口而不是摄影机取消投影,以便将黑条考虑在内。
Vector3 mousePos = gamePort.unproject(new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0));
speechBaloon.setPosition(mousePos.x, mousePos.y); //texture that follows cursor