所以我创建了一个基于图块的游戏,目前正在将鼠标悬停在图块上,我将鼠标悬停在排序上,这样当您将鼠标悬停在图像上时,它会改变颜色,但我仍然坚持如何在下一个颜色时删除颜色瓷砖徘徊。
Tile previous;
public void CheckHover() {
for (Tile t : map.getTiles()) {
if (t.IsMouseOver(screen.getMousePosition().x, screen.getMousePosition().y)) {
t.setMouseOver(true);
if (previous == null) {
previous = t;
} else {
previous.setMouseOver(false);
}
}
}
}
我上面的代码不太有用,我相信它可能取决于我如何引用该对象,但如果我为每个循环做一个,我怎么能得到当前悬停的对象和setMouseOver为false?
答案 0 :(得分:0)
我假设您将previous
存储在包含CheckHover()
的类中的某个位置(顺便说一下,检查命名约定,最好是checkHover()
)。
因此,只要鼠标位于不同的磁贴上,您就需要更新previous
。
这里是你的循环的一些伪代码:
boolean hovering = false;
for( Tile t : tiles ) {
if( t.mouseOver(...) ) {
//assuming t is never null, t.equals(...) will also work if previous is null
if ( !t.equals( previous ) ) {
if( previous != null ) {
previous.setMouseOver(false);
}
previous = t;
}
//else nothing to do, still hovering over the same tile
hovering = true;
break; //no need to look further
}
}
//reset when not hovering over any tile anymore
if( !hovering && previous != null ) {
previous.setMouseOver(false);
previous = null;
}
答案 1 :(得分:0)
两个建议:
mouseEntered()
和mouseExited()
方法。如果您不需要MouseListener
接口的所有方法,则可以扩展MouseAdapter
抽象类并覆盖我提到的这两种方法。<强>更新强>:
我发现这个Stackoverflow post可能正是您需要做的。去那里尝试建议的代码,并尝试使其适应您想要做的事情。我相信它对你的特殊情况会很有用。