我正在使用libGDX java框架在Eclipse中开发练习游戏.
我的游戏处于横向模式,我正在使用精灵图像作为游戏资产.实际上我正在尝试按照千比特ZombieBird教程
我已经设置了这样的正交相机 - >
cam = new OrthographicCamera();
cam.setToOrtho(true, 250, 120);
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我的背景纹理区域在精灵图像中是250 x 120像素.
所以基本上我的精灵图像尺寸很小,它根据设备进行缩放,但所有的计算都是相对于250 x 140像素完成的,就像更改我定义的对象的位置一样 Vector2 position = new Vector2(x, y);,如果我写position.x = 260;的精灵将去外面即使我的设备宽度是500px,屏幕也是如此.
问题: 现在我必须让移动精灵消失,当有人点击它时(想象一下僵尸四处移动,如果我点击它们就会死掉).所以我使用以下代码来匹配用户点击与对象co的合作-ords.
int x1 = Gdx.input.getX();
int y1 = Gdx.input.getY();
if(position.x == x1 && position.y == y1){
// do something that vanish the object clicked
}
Run Code Online (Sandbox Code Playgroud)
问题是position.x和position.y返回相对于正凸轮宽度和高度的co-ords,它是250x120 px,并且点击坐标是相对于设备宽度和高度的,可能是根据设备的任何东西.因此,即使我点击对象上的点击合并和对象位置合作他们的值有很大的差异.所以我永远不会得到匹配的值.
有没有解决方案,或者我做错了吗?
您必须使用相机取消投影设备坐标.相机具有内置功能,因此非常简单.此外,要确定是否单击了精灵,您必须检查点击的点是否在精灵内的任何位置,而不仅仅等于精灵的位置.做这样的事情:
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
}
Run Code Online (Sandbox Code Playgroud)