-1

我正在 xcode 中制作非常简单的应用程序。

我想,如果球进洞,比赛应该结束

所以我试着做。

if (ball . center == hole.center )

还有另一种方法,我失败了

我也试过这个

(ball.frame.origin.x == hole.frame.origin.x && ball.frame.origin.y == hole.frame.origin.y)

和往常一样失败了

请帮忙。

我只想要球的框架是否碰到洞 比赛结束

4

3 回答 3

6

问题是你不应该检查一个位置是否完全相同,这不是它与浮点坐标(我猜你正在使用的)和游戏中事物运动的精确度的工作方式,它们不需要在相同的物体上相同的位置。

您应该检查距离是否小于阈值:

float bx = ball.frame.origin.x;
float by = ball.frame.origin.y;

float hx = hole.frame.origin.x;
float hy = hole.frame.origin.y;

// you don't actually need abs since you are going to raise to the power of 2
// but for sake of soundness it makes sense
float dx = abs(bx-hx);
float dy = abs(by-hy);

if (sqrt(dx*dx + dy*dy) < THRESHOLD) {
  // the ball is enough near to center
}
于 2012-10-23T11:56:50.850 回答
1

您可以使用CGRectIntersectsRect更多关于 CGGeometry)来查看球和洞是否相交:

if (CGRectIntersectsRect(ball.frame, hole.frame)) {
    // Goal reached!
}

...或CGRectEqualToRect以相同的方式(如果您想检查框架是否完全相同)。

于 2012-10-23T11:58:28.430 回答
0

我的猜测是你不想测试两个中心是否相等,而是它们是否足够接近。例如,在 x 和 y 方向上小于 epsilon。

于 2012-10-23T11:56:38.947 回答