Spritekit自上而下转动角色运动

时间:2015-04-21 10:48:40

标签: objective-c vector sprite-kit top-down

我正在创造一个自上而下的赛车'游戏,如果你将在Spritekit。但是,我已经坚持创造游戏玩法。您可以从俯视图控制汽车,该汽车始终以恒定速度行驶。玩家可以按两个按钮向左或向右转动汽车。速度必须保持不变,但汽车的zRotation必须改变。改变zRotation不是问题,但是定义汽车的新速度是。

我目前正在使用向量,所以每当玩家按下“向左转”字样时,请说按钮zRotation改变为45度,恒定速度为20,新的速度将是:

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

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

但是,我不知道每次玩家持有turnLeft按钮时我应该如何制作这个变量,如果我应该使用动作或更新功能。如果玩家选择永久保持turnLeft按钮,则该玩家应该可以开圆。任何帮助表示赞赏!谢谢。

1 个答案:

答案 0 :(得分: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)

希望能回答你的问题。