我正在用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并查看他的乒乓球游戏菜单。他使用相同的概念。