Spritekit 自上而下转动角色运动

Spritekit top down turning character movement

我正在创建一个自上而下的 'racer' 游戏,如果您愿意的话,请使用 Spritekit。然而,我已经陷入了创造游戏玩法的困境。您可以从上到下的视角控制始终以恒定速度行驶的汽车。玩家可以按两个按钮让汽车向左或向右转。速度必须保持不变,但汽车的 zRotation 必须改变。更改 zRotation 不是问题,但定义汽车的新速度才是问题。

我目前正在使用 Vectors,所以说每次玩家按下 'turnLeft' 按钮时,汽车的 zRotation 都会改变 45 度,速度恒定为 20,新速度将是:

    player.physicsBody.velocity = CGVectorMake(14.14, 14.14);

通过使用 45 度的 sin 和 cos 以及给出恒定速度 20 的矢量和给出(具有两个 45 度角和 20 的一侧的三角形)。

但是,我不知道每次玩家按住 turnLeft 按钮时我应该如何创建这个变量,以及我应该使用动作还是更新函数。如果玩家选择永远按住 turnLeft 按钮,他应该可以绕圈。任何帮助表示赞赏!谢谢。

要计算速度的分量,您基本上需要按照您所说的进行操作,除了使用精灵的 zRotation 代替 45 度。例如:

let speed: CGFloat = 20 // The constant speed.

// Work out the components of velocity:
let dx = speed * cos(sprite.zRotation)
let dy = speed * sin(sprite.zRotation)

sprite.physicsBody!.velocity = CGVector(dx: dx, dy: dy)

作为一项改进,最好将此代码添加为 CGVector 的初始化程序,以实现可重用性:

extension CGVector {
    init(length: CGFloat, angle: CGFloat) {
        self.dx = length * cos(angle)
        self.dy = length * sin(angle)
    }
}

然后您可以像这样使用它:

sprite.physicsBody!.velocity = CGVector(length: speed, angle: sprite.zRotation)

希望这能回答您的问题。