java - 如何在 libGDX 框架中匹配用户点击和 sprite 对象位置

标签 java libgdx

我正在使用 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/

相关文章:

java - 最大对数

java - 获取已删除消息的 UID

Android SlickAE(libgdx)没有发现类定义错误

java - 为什么示例作者对正交相机的宽度和高度进行硬编码?(LibGdx Zombie Bird 教程)

java - Libgdx 播放器旋转困惑

java,评估 URL 而不是 File 的广泛使用

java - Hibernate 中 equals() 方法的问题

java - Android Retrofit 的烦恼

android - Libgdx + Android 应用内购买

java - Libgdx 阶段问题