0

Slick2D を使用して、ボタンをループし、現在ホバーされているボタンを強調表示しています。onHoverこれを行うには、イベントが発生するボタンのインデックスを保存します。ただし、最初のボタンにカーソルを合わせると、最後のボタンが強調表示されます。2 番目のボタンにカーソルを合わせると、最後から 2 番目のボタンが強調表示されます。ただし、キーボードを使用して選択したボタンを変更すると、完全に機能します。

インデックスを保存する方法は次のとおりです。

public void onHover(int x, int y) {
    Button but;
    for (int i = 0; i < b.size(); i++) {
        but = b.get(i);
        if (but.isClicked(x, y)) {
            choice = i;
            return;
        }
    }
}

そしてそれらを比較するもの:

public void draw(Graphics g) {
    Button but;
    for (int i = 0; i < b.size(); i++) {
        but = b.get(i);
        if (i == choice) {
            but.drawHighlighted(g);
        } else {
            but.draw(g);
        }
    }
}

これを行う特別な方法はありますか?

編集: 問題がどこにあるかがわかりました。

LWJGL の Mouse.getY() (onHover メソッドで使用) は、ウィンドウの高さからマウスの Y 位置を引いた値を返します。一方、Slick2D (draw メソッドで使用) の mouseReleased(button, x, y) は、「真の」Y 位置を返します。ただし、どちらも x 位置で同じ値を返します。

値が異なる理由はまだわかりません (Slick2D は LWJGL に基づいているため) が、問題を回避するために、HEIGHT - Mouse.getY() を使用して正しい位置に設定します。

その問題で私を助けてくれてありがとう!

4

0 に答える 0