0

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

4

2 回答 2

0

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

于 2013-11-07T18:22:55.787 回答
0

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

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

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

于 2013-11-07T17:54:04.390 回答