我正在使用Libgdx编写游戏,我需要检测用户何时触摸精灵。 我尝试使用以下代码执行此操作:
此代码设置rect的位置
for(int i = 0;i<circlesArray.length;i++)
{
rect[i] = new Rectangle(circles.getPosition(i).x,circles.getPosition(i).y,height/8,height/8);
}
并且此代码将click设置为矩形并检查它是否与精灵重叠
if(Gdx.input.isTouched())
{
click = new Rectangle(Gdx.input.getX(),Gdx.input.getY(),Gdx.input.getX(),Gdx.input.getY());
if(Intersector.overlaps(click,rect[1]));
{
System.out.println("clicked");
x[1] = 0;
}
}
由于某些原因我无法理解该程序即使没有发生碰撞也能检测到碰撞,当我点击屏幕上的任何地方时它会说我按下了精灵。
我该怎么做才能解决它?
答案 0 :(得分:1)
这是你的问题:
click = new Rectangle(Gdx.input.getX(), Gdx.input.getY(), Gdx.input.getX(), Gdx.input.getY());
应该是:
click = new Rectangle(Gdx.input.getX(), Gdx.input.getY(), 1, 1);
Rectangle的最后两个参数是width和height。这里我们给矩形一个宽度和一个像素的高度,但你可以把它设置为你喜欢的任何东西。您将这些参数设置为输入x和y,每次给出不同的结果时,它们都是不同的。
修改强> 要根据相机将输入坐标转换为游戏世界的坐标,您必须执行以下操作:
Vector3 clickPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(clickPos);
click = new Rectangle(clickPos.x, clickPos.y, 1, 1);
当您使用camera.unproject(Vector)时,它会根据您的相机在游戏世界中的位置来转换您的输入坐标。所以现在我们正在使用矢量clickPos。
我们使用Vector3的原因是因为这是unproject函数所需要的。我们为这个向量提供输入x和y,但为第三个参数z提供一个0,因为这是一个2d世界。