如何引用对象并更改其值

时间:2014-11-12 14:23:19

标签: java

所以我创建了一个基于图块的游戏,目前正在将鼠标悬停在图块上,我将鼠标悬停在排序上,这样当您将鼠标悬停在图像上时,它会改变颜色,但我仍然坚持如何在下一个颜色时删除颜色瓷砖徘徊。

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?

2 个答案:

答案 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)

两个建议:

  1. 学习How to Write a Mouse Listener - 你肯定需要知道这一点;特别是mouseEntered()mouseExited()方法。如果您不需要MouseListener接口的所有方法,则可以扩展MouseAdapter抽象类并覆盖我提到的这两种方法。
  2. 了解How to Use Layered Panes - 我认为您可以利用分层窗格来实现您想要的效果,方法是在触发上述鼠标事件时给出磁贴更改颜色的外观。
  3. <强>更新

    我发现这个Stackoverflow post可能正是您需要做的。去那里尝试建议的代码,并尝试使其适应您想要做的事情。我相信它对你的特殊情况会很有用。