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


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)
}