Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libGDX如何将用户单击与对象位置匹配?_Java_Android_Libgdx - Fatal编程技术网

Java libGDX如何将用户单击与对象位置匹配?

Java libGDX如何将用户单击与对象位置匹配?,java,android,libgdx,Java,Android,Libgdx,我正试图通过遵循kilobolt.com教程开发自己的游戏,并将其更改为我试图创建的内容,但我发现自己陷入了困境 有点背景: 在僵尸鸟教程中,在Bird对象中有一个onClick()方法,该方法在实现InputProcessor的另一个类的touchDown()方法中调用。当游戏运行,用户轻触屏幕时,小鸟的反应是上升一点 我想知道的是: 我尝试创建一些更详细的东西,要求用户在鸟移动时在屏幕上点击鸟的确切位置,每次点击鸟时,都需要动画 我尝试了一些我在谷歌找到的代码,当它们不起作用时,我对它们进行

我正试图通过遵循kilobolt.com教程开发自己的游戏,并将其更改为我试图创建的内容,但我发现自己陷入了困境

有点背景: 在僵尸鸟教程中,在Bird对象中有一个onClick()方法,该方法在实现InputProcessor的另一个类的touchDown()方法中调用。当游戏运行,用户轻触屏幕时,小鸟的反应是上升一点

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

我尝试了一些我在谷歌找到的代码,当它们不起作用时,我对它们进行了修改,但是游戏崩溃了


作为一名游戏开发新手,我希望你能原谅我的无能。

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

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

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

如果cam.setToOrTo(bool,height,width)中指定的高度和宽度与手机的高度和宽度相同,我的代码应该可以工作。如果它们不相等,那么您将遇到与该线程相同的问题。如果确实有不同的高度和宽度,则只需使用cam.unproject(vec3)为用户获得正确的x和y坐标。getCircle()。因此,您的setCircle()方法如下所示

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

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

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

//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.
}

请发布一些代码,说明您自己测试时出现的问题谢谢,看起来很简单。但我不需要正交摄影机变量吗?在我发现的大多数例子中,都需要一个……你能发布一个你正在谈论的例子吗?我不知道你为什么需要一个正交摄影机变量,但我已经几个月没有使用libGDX了。不幸的是,我已经删除了我使用的示例,但是在这里你可以找到我试图修改的代码示例。给我你对它的看法,如果你觉得没有必要修改你给我的代码示例,我会用V标记你的答案,并希望它能在使用它的时候起作用。