Java libGDX X和Y鼠标输入
我有一个libGDX代码,我不明白为什么它不工作。 我的想法如下:我创建了一个带有纹理的精灵,如果我点击这个精灵,就会发生一些事情。到目前为止还不错 我在位置上使用以下代码创建精灵:Java libGDX X和Y鼠标输入,java,libgdx,textures,sprite,mouseclick-event,Java,Libgdx,Textures,Sprite,Mouseclick Event,我有一个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);
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精灵位置:0.1
精灵的位置是正确的,但是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());
看一看。您正在将触摸/鼠标坐标(像素)与世界坐标(例如米)进行比较,而不进行转换。您可以使用相机
或视口
的取消投影
方法将输入坐标转换为世界坐标。您没有提供足够的信息来查看正在使用的相机,但是假设您使用的是相机
,则可以执行以下操作
Vector3 mousePos = new Vector3();
camera.unproject(mousePos.set(Gdx.input.getX(), Gdx.input.getY(), 0));
System.out.println("X Input: "+ mousePos.x);
当然,您不应该在频繁调用的代码中使用new
关键字,因此最好将mousePos
变量移动到类成员中。请查看。您正在将触摸/鼠标坐标(像素)与世界坐标(例如米)进行比较,而不进行转换。您可以使用相机
或视口
的取消投影
方法将输入坐标转换为世界坐标。您没有提供足够的信息来查看正在使用的相机,但是假设您使用的是相机
,则可以执行以下操作
Vector3 mousePos = new Vector3();
camera.unproject(mousePos.set(Gdx.input.getX(), Gdx.input.getY(), 0));
System.out.println("X Input: "+ mousePos.x);
当然,您不应该在频繁调用的代码中使用
new
关键字,因此最好将mousePos
变量移动到类成员。从鼠标获得的位置是屏幕坐标。您需要将它们投影(或者更确切地说,取消投影)到世界坐标。由于您使用的是正交摄影机
,因此这是一个简单的修复方法
Vector3 mouse = new Vector3(Gdx.input.getX, Gdx.input.getY, 0);
camera.unproject(mouse);
System.out.println(mouse);
从鼠标获得的位置是屏幕坐标。您需要将它们投影(或者更确切地说,取消投影)到世界坐标。由于您使用的是
正交摄影机
,因此这是一个简单的修复方法
Vector3 mouse = new Vector3(Gdx.input.getX, Gdx.input.getY, 0);
camera.unproject(mouse);
System.out.println(mouse);
您应该使用InputProcessor,而不是按下IsButton。显示渲染方法。您是否将屏幕坐标投影到世界坐标?您应该使用InputProcessor而不是按下IsButton。显示渲染方法。你把屏幕坐标投影到世界坐标了吗?