libGDX如何匹配用户点击到对象位置?

时间:2014-10-12 22:00:39

标签: java android libgdx

我试图通过跟随kilobolt.com教程开发自己的游戏并将其改为我想要创建的内容,但发现自己处于泡菜中......

有点背景: 在Zombie Bird教程中,在Bird对象内部有一个onClick()方法,该方法在实现InputProcessor的不同类的touchDown()方法中调用。当游戏运行并且用户点击屏幕时,鸟会做出反应。

我想知道的是什么: 我尝试创建一些更详细的东西,要求用户在移动时点击鸟在屏幕上的确切位置,每次点击鸟时,都需要动画。

我尝试了一些我在Google上找到的代码,并在它们不起作用时进行了修改,但游戏刚刚崩溃。

对游戏开发不熟悉我要求你以我的无能为力。

3 个答案:

答案 0 :(得分:1)

我会从libGDX的Circle类中创建两个Circle对象。一个圆圈将跟随屏幕上的鸟,而另一个圆圈根据用户触摸屏幕的位置定位。 if语句如下所示:

if(user.getCircle().intersects(bird.getCircle()) && screen.isTouched())
    animation();

不是很复杂,甚至可能不是最好的实施方式,但它是一些东西。

答案 1 :(得分:1)

您可以使用数学将屏幕坐标转换为凸轮坐标:

//Example:
float ScreenWidth = Gdx.graphics.getWidth(); 
float ScreenHeight = Gdx.graphics.getHeight();
// on a 1080p screen this would return ScreenWidth = 1080, ScreenHeight = 1920; 
//now you get the screen co-ordinates and convert them to cam co-ordinates:
float x1 = Gdx.input.getX();
float y1 = Gdx.input.getY();
float x1cam = (x1/ScreenWidth)*CamWidth
float y1cam = (y1/ScreenHeight)*CamHeight

// now you can use the if statement
if(sprite.getBoundingRectangle().contains(x1cam, y1cam)) {
    //Go whatever you want to do with the bird/ sprite 
    // for more accuracy I would recommend drawing a shape that matches your sprite like a circle and check if the input co-ordinates are withing the circle.
}

答案 2 :(得分:0)

如果cam.setToOrtho(bool,height,width)中指定的高度和宽度与手机的高度和宽度相同,我的代码应该有效。如果它们不相等,那么您将遇到与该线程相同的问题。如果你有不同的高度和宽度,那么你只需要使用cam.unproject(vec3)来获取user.getCircle()的正确x和y坐标。所以,你的setCircle()方法看起来像

public void setCircle(Vector3 touchPos)
{
    cam.unproject(touchPos);
    this.circle.set(touchPos.x, touchPos.y, touchPos.z);
}

同样,该代码仅适用于手机的高度和宽度与正交相机的高度和宽度不同的情况。