SKAction.moveByX没有设置physicsBody.velocity

Mar*_*rty 0 sprite-kit swift

我正在使用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也更新速度?

ric*_*ter 7

动作和物理在很大程度上是SpriteKit中的独立机制.通常,如果您使用物理来移动身体,则不应对其使用移动操作.如果你想移动已经使用物理的物体,使用物理移动它 - 施加力或冲动,或直接设置其速度.

相反,当您使用动作移动主体或position直接设置主体时,这些更改不会通过物理引擎.如果要在移动操作期间找到节点的速度,则必须通过观察帧之间位置的变化来自行计算.