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() を使用して正しい位置に設定します。
その問題で私を助けてくれてありがとう!