2016-11-18 97 views
0

时,我该如何使框架变小?我有两个图像:球和障碍物。如果球碰到障碍物,那就是比赛结束了。当我打电话给CGRectIntersectsRect

但是因为我的障碍物和球没有被塑造成一个矩形,所以它看起来像是在他们互相撞击之前的比赛。我明白他们的框架实际上确实打了对方。但在游戏中,我的游戏转移功能在它看起来像我的球和障碍物相交之前被调用。

希望能够找到一些帮助,这样我可以让我的两个图像真的看起来像他们在我的gameover函数被调用之前碰到对方。

if CGRectIntersectsRect(ball.frame, obstacle.frame) { 
    gameOver() 
} 
+1

可以插页的矩形使其变小。 https://developer.apple.com/reference/coregraphics/1454218-cgrectinset –

+0

这对我来说是有道理的,但我无法让它起作用。也许我实施错了?在我的if语句之前,我声明了新的矩形: CGRectInset(obstacle.frame,2000,2000)。 @JoshHomann这是不正确的? – Frederic

+0

这是正确的,但2000,2000似乎非常大,非常随意。例如用一个球而不是使用包含该圆的矩形,我会使用足够小的矩形来包含圆。简单的三角告诉你,高度和宽度应该是sqrt(2)/ 2或0.707乘以外部矩(sin(45)* radius * 2),所以让collisionFrame = CGRectInset(ball.frame,(1-0.707)* ball .frame.size.width,(1-0.707)* ball.frame.size.height) –

回答

0
extension CGPoint { 
    func distance(to p: CGPoint) -> CGFloat { 
     return sqrt((p.x - self.x) * (p.x - self.x) + (p.y - self.y) * (p.y - self.y)) 
    } 
} 



extension UIView { 

    func collided(with otherView: UIView) -> Bool { 
     let myRadius = bounds.width/2 
     let hisRadius = otherView.bounds.width/2 

     return self.center.distance(to: otherView.center) <= myRadius + hisRadius 
    } 
} 

现在读得很好:

if ball.collided(with: obstacle) { 
    gameOver() 
}