我正在使用 libGDX java 框架在 Eclipse 中开发练习游戏。
我的游戏处于横屏模式,我正在为游戏 Assets 使用 sprite 图像。实际上我正在尝试跟随千 bolt ZombieBird tutorial
我是这样设置正交相机的 -->
cam = new OrthographicCamera();
cam.setToOrtho(true, 250, 120);
我这样做是因为我的背景纹理区域在 Sprite 图像中是 250 x 120 像素。
所以基本上我的 sprite 图像尺寸很小,它会根据设备进行缩放,但所有计算都是相对于 250 x 140 像素完成的,比如更改我定义的对象的位置 Vector2 position = new Vector2(x, y);
如果我写 position.x = 260;
即使我的设备宽度是 500px, Sprite 也会离开屏幕。
问题: 现在我必须让移动的 Sprite 在有人点击它时消失(想象一下僵尸四处移动,如果我点击它们他们就会死)。所以我使用以下代码来匹配用户点击坐标与对象坐标.
int x1 = Gdx.input.getX();
int y1 = Gdx.input.getY();
if(position.x == x1 && position.y == y1){
// do something that vanish the object clicked
}
问题是 position.x 和 position.y 返回相对于 250x120 像素的正交凸轮宽度和高度的坐标,点击坐标是相对于设备宽度和高度的坐标,根据设备。因此,即使我在对象上单击鼠标右键,单击坐标和对象位置坐标的值也有很大差异。所以我永远不会得到匹配值。
有什么解决办法还是我做错了?
最佳答案
您必须使用相机取消投影设备坐标。相机具有执行此操作的内置功能,因此非常简单。此外,要确定 Sprite 是否被点击,您必须检查点击的点是否在 Sprite 内部的任何位置,而不仅仅是等于 Sprite 的位置。做这样的事情:
int x1 = Gdx.input.getX();
int y1 = Gdx.input.getY();
Vector3 input = new Vector3(x1, y1, 0);
cam.unproject(input);
//Now you can use input.x and input.y, as opposed to x1 and y1, to determine if the moving
//sprite has been clicked
if(sprite.getBoundingRectange().contains(input.x, input.y)) {
//Do whatever you want to do with the sprite when clicked
}
关于java - 如何在 libGDX 框架中匹配用户点击和 sprite 对象位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645422/