我正在使用Swift编写SpriteKit游戏,并使用以下代码移动我的精灵 - 但是,它似乎没有更新velocity.dx:
func walk(isRight: Bool, speed: Float) {
var newV = (isRight ? 1 : -1) * 20 * speed;
let moveAction = SKAction.moveByX(newV, y: 0, duration: 2.0)
self.runAction(SKAction.repeatActionForever(moveAction), withKey: "walking")
println("self.physicsBody.velocity.dx: \(self.physicsBody.velocity.dx)")
}
Run Code Online (Sandbox Code Playgroud)
这是我在控制台中得到的:
self.physicsBody.velocity.dx: 0.0
Run Code Online (Sandbox Code Playgroud)
有什么我需要做的是让moveByX也更新速度?
动作和物理在很大程度上是SpriteKit中的独立机制.通常,如果您使用物理来移动身体,则不应对其使用移动操作.如果你想移动已经使用物理的物体,使用物理移动它 - 施加力或冲动,或直接设置其速度.
相反,当您使用动作移动主体或position直接设置主体时,这些更改不会通过物理引擎.如果要在移动操作期间找到节点的速度,则必须通过观察帧之间位置的变化来自行计算.