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

时间:2013-11-07 17:41:34

标签: java lwjgl collision

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

感谢Marcel Puyat:D

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我发现X线也是向后的。如果我穿着你的鞋子,我会尝试穿上绳索,看看是否有效。它也可能是你没有鼠标监听器或它没有正确运行。如果您需要有关鼠标监听器的帮助,请查看youtube上的Java Hub并查看他的pong游戏菜单。他使用相同的概念。