沿其运动方向旋转精灵非常简单。您可以使用函数将子画面速度的
x和
y分量转换为一个角度来实现
atan2。仅当精灵的速度大于某个标称值时,才应旋转它,以防止在精灵的速度(接近)为零时将精灵重置为零度。
如果我们扩展
CGVector以通过速度分量计算速度和角度
extension CGVector { func speed() -> CGFloat { return sqrt(dx*dx+dy*dy) } func angle() -> CGFloat { return atan2(dy, dx) }}我们可以旋转精灵,使其面向运动方向
override func didSimulatePhysics() { if let body = sprite.physicsBody { if (body.velocity.speed() > 0.01) { sprite.zRotation = body.velocity.angle() - offset } }}其中,
offset = CGFloat(M_PI_2)如果当你的精灵朝上
zRotation是零,
offset =0如果当你的精灵面向右边
zRotation是零。



