libGDX X和Y MouseInput

时间:2016-02-28 11:42:52

标签: 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);

        // 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());

2 个答案:

答案 0 :(得分:3)

看看this article。您正在将触摸/鼠标坐标(像素)与世界坐标(例如米)进行比较,而不进行转换。您可以使用unprojectCamera的{​​{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);