假设我有一个对象数组Ball在画布中漂浮,如果单击一个对象,它将消失。我很难想知道如何点击一个对象。如果鼠标位置在那些对象的区域内,我应该使用for循环来循环吗?但我担心这会减缓进度。实现这一目标的合理算法是什么?
答案 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语句中指定要对该对象执行的操作。