1

如果你愿意在 Spritekit 中创建一个自上而下的“赛车”游戏。但是,我已经陷入了创建游戏玩法的困境。您可以从自上而下的视角控制一辆始终以恒定速度行驶的汽车。玩家可以按两个按钮来让汽车左转或右转。速度必须保持不变,但汽车的 zRotation 必须改变。改变 zRotation 不是问题,但定义汽车的新速度才是问题。

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

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

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

但是,我不知道每次玩家按住 turnLeft 按钮时我应该如何制作这个变量,以及是否应该使用动作或更新功能。如果玩家选择永远按住左转按钮,他应该可以驾驶一个圆圈。任何帮助表示赞赏!谢谢。

4

1 回答 1

0

要计算速度的组成部分,您基本上需要按照您所说的进行,除了使用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)

希望这能回答你的问题。

于 2015-04-21T11:24:00.460 回答