我有一个球在上下弹跳。我通过设置它的物理体来完成这个:
linearDamping = 0
friction = 0
restitution = 1
然后在设置调用中只有applyForce(CGVectorMake(0, 10))
。球现在正在上下颠簸,上下不间断地跳起来。
现在我想添加播放器控件。球员可以侧身移动球。我可以通过在按下控件时设置球速来完成此操作。但是,通过这样做,我失去了物理引擎给我的所有东西。
这是我现在拥有的一小段代码:
override func update(currentTime: CFTimeInterval) {
/* Apply damping only in x */
if !movingLeft && !movingRight {
let dx = ball!.physicsBody!.velocity.dx * xAlpha
let dy = ball!.physicsBody!.velocity.dy
ball!.physicsBody?.velocity = CGVectorMake(dx, dy)
}
if movingRight {
ball!.physicsBody?.applyImpulse(CGVectorMake(ballVelocityX, 0))
}
if movingLeft {
ball!.physicsBody?.applyImpulse(CGVectorMake(-ballVelocityX, 0))
}
}
正如你可能想象的那样,问题就是在每一帧上施加冲动这样的冲动使得球在控制被按下时超速,这不是我想要的。但是如果我只在keyDown
上施加力,一旦球击中某个球,球就会停止向那个方向移动。此外,keyDown
事件在OS X上运行起因(因为重复键设置)。
所以我想做的是在update
函数中施加冲动,使得球的力量不超过我的极限,但如果球击中某些东西也不会完全消失。