Libgdx获得缩放触摸位置

时间:2014-01-25 13:45:10

标签: java touch libgdx

我正在使用LIBGDX在Android游戏中工作。

@Override
public boolean touchDown(int x, int y, int pointer, int button) {
    // TODO Auto-generated method stub

    return false;
}

此处,x和y返回设备屏幕触摸的位置,值介于0和设备屏幕宽度和高度之间。

我的游戏分辨率为800x480,并且会在每台设备上保持其宽高比。 我想找到一种方法来获得与游戏矩形相关的触摸位置,这个图像可以准确地解释: enter image description here

有办法吗? 我想获得与我的视口相关的触摸位置.. 我用它来保持纵横比 http://www.java-gaming.org/index.php?topic=25685.0

3 个答案:

答案 0 :(得分:12)

取消投影您的触摸。

为用户触摸制作一个Vector3对象:

Vector3 touch = new Vector3();

使用相机将屏幕触摸坐标转换为相机坐标:

@Override
public boolean touchDown(int x, int y, int pointer, int button){

    camera.unproject(touch.set(x, y, 0)); //<---

    //use touch.x and touch.y as your new touch point

    return false;
}

答案 1 :(得分:7)

在较新版本的LibGDX中,您可以使用内置视口实现它。 首先选择你想要的视频,你想要的是FitViewport。 你可以在这里阅读它们: https://github.com/libgdx/libgdx/wiki/Viewports
接下来,您声明并初始化视口并传递分辨率和相机:

viewport = new FitViewport(800, 480, cam);

然后编辑屏幕类的“调整大小”方法,如下所示:

@Override
public void resize(int width, int height) {
    viewport.update(width, height);

}

现在,无论您想要获取触摸点,都需要根据新分辨率将它们转移到新点。幸运的是,viewport类会自动执行它。

请写下:

Vector2 newPoints = new Vector2(x,y);
newPoints = game.mmScreen.viewport.unproject(newPoints);

其中x和y是屏幕上的触摸点,在第二行中,“newPoints”获取变换后的坐标。
现在你可以把它们传递到任何你想要的地方。

答案 2 :(得分:0)

经过1-2个小时后我终于找到了解决方案..

if (Gdx.input.isTouched()) {
        float x = Gdx.input.getX();
        float y = Gdx.input.getY();
        float yR = viewport.height / (y - viewport.y); // the y ratio
        y = 480 / yR;

        float xR = viewport.width / (x - viewport.x); // the x ratio
        x = 800 / xR;

        bubbles.add(new Bubble(x, 480 - y));

    }

编辑:这是一种旧的弃用方法,所以不要这样做。