如何确定是否单击了某个对象?

时间:2014-02-25 05:50:11

标签: mouseevent processing

假设我有一个对象数组Ball在画布中漂浮,如果单击一个对象,它将消失。我很难想知道如何点击一个对象。如果鼠标位置在那些对象的区域内,我应该使用for循环来循环吗?但我担心这会减缓进度。实现这一目标的合理算法是什么?

2 个答案:

答案 0 :(得分:1)

跟踪球的各个中心点和半径,每当鼠标点击发生时,计算鼠标坐标与其他球中心的距离。如果任何距离出现在特定球的半径范围内,则表示点击了该特定球。

public class Ball {
  private Point centre;
  private int radius;

  public boolean isInVicinityOf(int x, int y)
  {
    // There are faster ways to write the following condition, 
    // but it drives the point I'm making.
    if(Math.hypot(centre.getX() - x, centre.getY() - y) < radius)
      return true;
    return false;
  }

  // ... other stuff
}

这是一个用于检查鼠标是否在任何球上发生的代码:

// Returns the very first ball object which was clicked.
// And returns null if none was clicked.
public Ball getBallClicked(Ball[] balls, MouseEvent event)
{
  for (Ball ball : balls)
  {
    if(ball.isInVicinityOf(event.getX(), event.getY()))
    {
      return ball;
    }
  }

  return null;
}

还有许多其他方法可以实现相同的功能,例如使用Observer模式和其他方法,但上面是其中一种方法。

希望它有所帮助。

答案 1 :(得分:0)

使用void mouseClicked()然后在屏幕上指定其坐标。您可以在该void中的if语句中指定要对该对象执行的操作。