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");
}

衝突チェックは非常に簡単です。マウスが要素の境界内にあるかどうかを確認するだけです。

なぜうまくいかないのか理解できない

// UPDATE ようやく理解できました。何らかの理由で Y 座標が反転しました。

次のように Y 値を計算して修正しました: int MouseY = Display.getHeight() - Mouse.getY();

マルセル・ピュヤットに感謝 :D

4

2 に答える 2

0

Xコードも逆になっていることがわかりました。私があなたの立場だったら、コードを入れてみて、それが機能するかどうかを確認します. また、マウス リスナーがないか、正しく動作していない可能性もあります。マウス リスナーのヘルプが必要な場合は、YouTube の The 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 に答える