我正在创造一个自上而下的赛车'游戏,如果你将在Spritekit。但是,我已经坚持创造游戏玩法。您可以从俯视图控制汽车,该汽车始终以恒定速度行驶。玩家可以按两个按钮向左或向右转动汽车。速度必须保持不变,但汽车的zRotation必须改变。改变zRotation不是问题,但是定义汽车的新速度是。
我目前正在使用向量,所以每当玩家按下“向左转”字样时,请说按钮zRotation改变为45度,恒定速度为20,新的速度将是:
player.physicsBody.velocity = CGVectorMake(14.14, 14.14);
通过使用45度的sin和cos以及给出恒定速度20的向量之和(具有两个45度角和一侧为20的三角形)来给出。
但是,我不知道每次玩家持有turnLeft按钮时我应该如何制作这个变量,如果我应该使用动作或更新功能。如果玩家选择永久保持turnLeft按钮,则该玩家应该可以开圆。任何帮助表示赞赏!谢谢。
答案 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)
希望能回答你的问题。