我正在使用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,并且会在每台设备上保持其宽高比。 我想找到一种方法来获得与游戏矩形相关的触摸位置,这个图像可以准确地解释:
有办法吗? 我想获得与我的视口相关的触摸位置.. 我用它来保持纵横比 http://www.java-gaming.org/index.php?topic=25685.0
答案 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));
}
编辑:这是一种旧的弃用方法,所以不要这样做。