我在xcode中制作非常简单的应用程序。
我想说,如果球到达洞,比赛应该完成
所以我试着做。
if (ball . center == hole.center )
和其他方式我失败了
我也试过这个
(ball.frame.origin.x == hole.frame.origin.x && ball.frame.origin.y == hole.frame.origin.y)
和往常一样失败
请帮忙。
我只是想要,如果球的fram触及了游戏结束那个洞
答案 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)
您可以使用CGRectIntersectsRect
(more on CGGeometry)查看球和洞是否相互交叉:
if (CGRectIntersectsRect(ball.frame, hole.frame)) {
// Goal reached!
}
...或CGRectEqualToRect
以同样的方式(如果你想检查帧是否完全相同)。
答案 2 :(得分:0)
我的猜测是你不想测试这两个中心是否相等,而是它们是否足够接近彼此。例如,在x和y方向上的距离小于epsilon。