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)
希望这能回答您的问题。
我正在创建一个自上而下的 '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)
希望这能回答您的问题。