SpriteKit-弹跳节点恒定速度/速度?

时间:2019-04-01 21:38:09

标签: swift xcode sprite-kit game-physics

enter image description here

简单的设置-我有反弹球节点(蓝色)和静态球节点(绿色)。灰色框具有物理实体SKPhysicsBody(edgeLoopFrom: box.frame),因此它限制了弹跳球向外部移动。我在创建时将弹跳球节点(蓝色)的速度设置为随机CGVector,它开始移动。它从静态球节点(绿色)和灰色框的边缘反弹。

我对所有节点的常规SKPhysicsBody设置是:

node.physicsBody?.restitution = 1
node.physicsBody?.friction = 0.0
node.physicsBody?.linearDamping = 0.0
node.physicsBody?.angularDamping = 0.0

我的问题是:如何确保弹跳球确实以恒定的速度运动?几次反弹后,该节点要么加速,要么减速。

1 个答案:

答案 0 :(得分:0)

为了实现这一点,只要物理引擎检测到碰撞,我都会对向量进行归一化。因此,在func didBegin(_ contact: SKPhysicsContact)中,会发生以下情况:

let length = hypotf(Float(node.velocity.dx), Float(node.velocity.dy)) 
let multiplier = (290.0 / length)
firstBody.velocity.dx *= CGFloat(multiplier)
firstBody.velocity.dy *= CGFloat(multiplier)

290.0是确定球速的任意值。

作为参考,请选中this answer