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