无法正确检测到碰撞

时间:2014-12-19 18:33:46

标签: java android libgdx

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

        }

由于某些原因我无法理解该程序即使没有发生碰撞也能检测到碰撞,当我点击屏幕上的任何地方时它会说我按下了精灵。

我该怎么做才能解决它?

1 个答案:

答案 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世界。