Java 冲突检查无法按预期工作



我正在用Java编程一个游戏。我正在使用 LWJGL 作为引擎,因为它似乎符合我的需求。

我刚刚实现了主菜单,并为菜单元素编写了一个类,之后,我编写了代码以在屏幕中心显示元素,然后我尝试编写一些代码来检查鼠标是否悬停在按钮上。

可悲的是,它没有按预期工作。碰撞检查似乎非常搞砸。

希望你能帮助:)

这是我渲染菜单并检查冲突的代码:

public static void RenderMenu()
{
    int LineHeight = 45;
    int StartOffset = (Display.getHeight() / 2) - ((elements.length * LineHeight) / 2);
    int current = 0;
    int MouseX = Mouse.getX();
    int MouseY = Mouse.getY();
    boolean TitleDrawn = false;
    for (MenuElement elem : elements)
    {
        Engine.DrawStringCentered(elem.Text, StartOffset + (LineHeight * current));
        elem.X = (Display.getWidth() / 2) - (elem.GetWidth() / 2);
        elem.Y = StartOffset + (LineHeight * current);
        if ((MouseX >= elem.X && MouseX <= elem.X + elem.GetWidth()) &&
            (MouseY >= elem.Y && MouseY <= elem.Y + elem.GetHeight()))
        {
            Engine.DrawTitle(elem.Text);
            TitleDrawn = true;
        }
        current++;
    }
    if (!TitleDrawn) Engine.DrawTitle("Backsteine");
}

碰撞检查非常简单。它只检查鼠标是否在元素的边界内。

我不明白为什么它不起作用

//更新我终于想通了。由于某种原因,Y 坐标被翻转。

我通过计算 Y 值来修复它,如下所示:int MouseY = Display.getHeight() - Mouse.getY();

感谢马塞尔·普亚特·:D

看起来这可能在您的代码中关闭:

(MouseY >= elem.Y && MouseY <= elem.Y + elem.GetHeight())

Y 值随着它们的下降而增加,随着它们的上升而减小(即您的原点位于屏幕的左上角。因此,当您的鼠标小于 elem 时,就会发生碰撞。Y 和大于 elem。Y + elem。GetHeight().

我发现X线也是向后的。如果我在你的鞋子里,我会试着放上绳子,看看是否有效。也可能是您没有鼠标侦听器或它运行不正常。如果您需要鼠标侦听器的帮助,请查看youtube上的Java Hub并查看他的乒乓球游戏菜单。他使用相同的概念。

相关内容

最新更新