尝试通过按下按钮将 sprite 的 zRotation 增加 1 度时旋转不正确

getting incorrect rotation when trying to increment a sprite's zRotation by 1 degree with button press

我有一个简单的矩形精灵,我想在每次按下屏幕上的按钮时将该精灵旋转 1 度。我有一些我希望可以工作的简单代码,但它给出了奇怪的结果。不是将矩形旋转 1 度,而是每次点击至少将其旋转 180-270 度。

var degrees = 0

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    let touchLocation = touch!.location(in: self)
    let beam = childNode(withName: "beam") as! SKSpriteNode


    if let body = physicsWorld.body(at: touchLocation) {
        if body.node!.name == "leftTap" {
            print("Began touch on Left")
            beam.zRotation = CGFloat(degrees)
            degrees = degrees + 1

        }else{
            print("Began touch on right")
        }
    }
}

在 GameScene.sks 精灵属性检查器中,您可以通过按“+”或“-”按钮来增加旋转。我想这会以同样的方式工作,但我一定不了解这里的轮换原则。

如有任何建议,我们将不胜感激。

不是度数,是弧度。 3 左右的值 (pi) 是一个完整的自旋。

https://developer.apple.com/documentation/spritekit/sknode/1483089-zrotation

这是您可以使用的便捷扩展:

extension SKNode {
  // Usage is node.rotateBy(45) etc:
  func rotateBy(_ degree: CGFloat) {
    let conversionFactor = CGFloat(0.01745329252)
    self.run(.rotate(byAngle: degree * conversionFactor, duration: 0))
  }
}