如果球到达球洞如何进行测试?

时间:2012-10-23 11:52:47

标签: objective-c ios

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

我想说,如果球到达洞,比赛应该完成

所以我试着做。

if (ball . center == hole.center )

和其他方式我失败了

我也试过这个

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

和往常一样失败

请帮忙。

我只是想要,如果球的fram触及了游戏结束那个洞

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

您可以使用CGRectIntersectsRectmore on CGGeometry)查看球和洞是否相互交叉:

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

...或CGRectEqualToRect以同样的方式(如果你想检查帧是否完全相同)。

答案 2 :(得分:0)

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