【问题标题】:libGDX X and Y MouseInputlibGDX X 和 Y 鼠标输入
【发布时间】:2016-06-11 11:01:49
【问题描述】:

我有一个 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 精灵位置: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());

【问题讨论】:

  • 你应该使用 InputProcessor 而不是 isButtonPressed。显示渲染方法。您是否将屏幕坐标投影到世界坐标?

标签: java libgdx textures sprite mouseclick-event


【解决方案1】:

看看this article。您将触摸/鼠标坐标(像素)与世界坐标(例如米)进行比较,而不进行转换。您可以使用CameraViewportunproject 方法将输入坐标转换为世界坐标。您没有提供足够的信息来查看您使用的是哪个,但假设您使用的是Camera,那么您可以执行以下操作。

Vector3 mousePos = new Vector3();
camera.unproject(mousePos.set(Gdx.input.getX(), Gdx.input.getY(), 0));
System.out.println("X Input: "+ mousePos.x);

当然你不应该在频繁调用的代码中使用new关键字,所以你最好将mousePos变量移动到一个类成员中。

【讨论】:

    【解决方案2】:

    您从鼠标获得的位置是屏幕坐标。您需要将它们投影(或更确切地说是取消投影)到世界坐标。由于您使用的是OrthographicCamera,因此这很容易解决。

    Vector3 mouse = new Vector3(Gdx.input.getX, Gdx.input.getY, 0);
    camera.unproject(mouse);
    
    System.out.println(mouse);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多