SpriteKit打砖块-解决小球无限循环运动

SpriteKit打砖块-解决小球无限循环运动

问题描述:
当砖块为圆形,直角三角形时,小弹反弹会有多个可能的方向,例会出现下图的无限运行轨迹:

小球无限循环.png

无限水平运动的解决方案:
修复小球无限循环.png

当小球与墙碰撞时,判断小球当前向量dy是否小于10,如果小球的位置在于0在上方则向下给新的向量向下运动,反之向上运动,speed为小球的速度例300.

if abs(ball.physicsBody?.velocity.dy)<10{
    let oy:CGFloat=ball.position.y>0 ?-30:30
    let dx:CGFloat=sqrt(speed*speed-oy*oy)
    ball.physicsBody?.velocity=CGVector(dx:dx,dy:oy)
}

无限垂直运动的解决方案:
当小球与挡板碰撞时,判断小球当前向量dx是不是小于10,如果小球位置在右侧,则向左运行,反之向右运行。

if abs(ball.physicsBody?.velocity.dx)<10{
    let ox:CGFloat=ball.position.x>0 ?-20:20
    let dy:CGFloat=sqrt(speed*speed-ox*ox)
    ball.physicsBody?.velocity=CGVector(dx:dx,dy:oy)
}

你可能感兴趣的:(SpriteKit打砖块-解决小球无限循环运动)