我有一个libGDX代码,我不知道它为什么不起作用。 我的想法如下:我创建一个带有纹理的精灵,如果我点击这个精灵,那么应该发生一些事情。到现在为止还挺好。
我在位置上使用以下代码创建精灵:
X = 0.1f;
Y = 0.5f;
这很好......
Sprite spr = new Sprite(texture);
// Define sprite size to be 1m x 1m in game world
spr.setSize(1, 1);
// Set origin to sprite's center
spr.setOrigin(spr.getWidth() / 2.0f, spr.getHeight() / 2.0f);
// Calculate random position for sprite
float randomX = 0.1f;
float randomY = 0.5f;
spr.setPosition(randomX, randomY);
// Put new sprite into array
testSprites[i] = spr;
现在我想在点击时获取鼠标的X和Y位置。 但是当我尝试使用Systemout时,我得到以下坐标: X输入:748 X Sprite位置:0.1
Sprite位置是正确的,但X输入(Gdx.input.getX)也应该在0.1左右,但远远不够。有什么我不考虑的吗?
if (Gdx.input.isButtonPressed(Buttons.LEFT))
System.out.println("X Input: "+ Gdx.input.getX());
System.out.println("X Sprite Position: "+testSprites[1].getX());
答案 0 :(得分:3)
看看this article。您正在将触摸/鼠标坐标(像素)与世界坐标(例如米)进行比较,而不进行转换。您可以使用unproject
或Camera
的{{1}}方法将输入坐标转换为世界坐标。您没有提供足够的信息来查看您使用的是哪个,但假设您使用的是Viewport
,那么您可以执行以下操作。
Camera
当然,您不应在频繁调用的代码中使用Vector3 mousePos = new Vector3();
camera.unproject(mousePos.set(Gdx.input.getX(), Gdx.input.getY(), 0));
System.out.println("X Input: "+ mousePos.x);
关键字,因此最好将new
变量移动到类成员。
答案 1 :(得分:0)
从鼠标获得的位置是屏幕坐标。您需要将它们(或者更确切地说是未投影它们)投影到世界坐标。由于您使用的是OrthographicCamera
,因此这是一个简单的解决方法。
Vector3 mouse = new Vector3(Gdx.input.getX, Gdx.input.getY, 0);
camera.unproject(mouse);
System.out.println(mouse);