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");
}
衝突チェックは非常に簡単です。マウスが要素の境界内にあるかどうかを確認するだけです。
なぜうまくいかないのか理解できない
// UPDATE ようやく理解できました。何らかの理由で Y 座標が反転しました。
次のように Y 値を計算して修正しました: int MouseY = Display.getHeight() - Mouse.getY();
マルセル・ピュヤットに感謝 :D