我无法理解SpriteKit的旋转系统

时间:2016-02-09 16:03:35

标签: swift sprite-kit

我正在尝试使用SKAction.rotateToAngle旋转精灵。例如:

rotate = SKAction.rotateToAngle(desiredAngle, duration: 1.0)
sprite.runAction(rotate)

但它没有按预期工作。精灵以不同的方式旋转。通过尝试和尝试我发现这是SpriteKit采用的旋转系统:

enter image description here

现在我不知道为什么他们决定采用这种坐标系,但这很反直觉。如何在此系统和正常系统之间进行转换? 顺便说一句,我怎么能顺时针旋转精灵呢?

2 个答案:

答案 0 :(得分:2)

来自文档:

enter image description here

  

0弧度的角度指定正x轴。一个正角度   是逆时针方向。

要逆时针旋转对象90度,请执行以下操作:

let action = SKAction.rotateToAngle(CGFloat(M_PI/2.0), duration: 5.0)

要将对象顺时针旋转90度,请执行以下操作:

let action = SKAction.rotateToAngle(CGFloat(-M_PI/2.0), duration: 5.0)

或者不使用底片(-90度),您可以将角度指定为正值(270度),并使用rotateToAngle(_:duration:shortestUnitArc:)方法将对象旋转到导致最小旋转的方向。 / p>

 let action = SKAction.rotateToAngle(CGFloat(2 * M_PI - M_PI/2.0), duration: 5, shortestUnitArc: true)

答案 1 :(得分:0)

Swift 5.2

要将对象顺时针旋转180度:

let spin = SKAction.rotate(toAngle: -.pi, duration: 10)

要将对象逆时针旋转180度:

let spin = SKAction.rotate(toAngle: .pi, duration: 10)

至90度,除以2:

let spin = SKAction.rotate(toAngle: -.pi/2, duration: 10)
let spin = SKAction.rotate(toAngle: .pi/2, duration: 10)

enter image description here