尝试按下按钮将精灵的 zRotation 增加 1 度时旋转不正确

Posted

技术标签:

【中文标题】尝试按下按钮将精灵的 zRotation 增加 1 度时旋转不正确【英文标题】:getting incorrect rotation when trying to increment a sprite's zRotation by 1 degree with button press 【发布时间】:2017-06-11 06:33:24 【问题描述】:

我有一个简单的矩形精灵,我希望每次按下屏幕上的按钮时都将这个精灵旋转 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 sprite 属性检查器中,您可以通过按“+”或“-”按钮来增加旋转。我想这会以同样的方式工作,但我一定不了解这里的轮换原则。

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

不是度数,是弧度。 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))
  

【讨论】:

谢谢,我会调查的! .sks 我怎么能增加一级? @genericguy25 哈哈,问苹果。如您所见,这些东西的设计不一定完美;) @genericguy25 等一下,让我做一个函数让你帮忙 谢谢!我将如何使用扩展程序?我之前没用过很多扩展 @genericguy25 等一下,我这里有个错误。

以上是关于尝试按下按钮将精灵的 zRotation 增加 1 度时旋转不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮按下时删除子/精灵?

Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性

GAMEMAKER 2.o 按下按钮后增加计时器

需要帮助在按下精灵节点按钮时为其提供动画

精灵套件目标 c 中的停止按钮

SKSpriteNode zrotation M_PI 真气