什么是M_PI / Double.pi用于,为什么我们使用它? Spritekit

时间:2017-04-10 04:33:15

标签: ios swift xcode8

我正在使用swift spritekit。

嗨,我有几个关于M_PI的问题,我最近了解到了这一点。对于我的游戏,我一直在研究不同的旋转方式。基本上,在我的游戏中,有2架飞机围绕屏幕中心“飞行”。

注意:当我尝试使用M_PI时,Xcode警告我使用double.pi,我用它替换M_PI。这些事情是一回事吗?

  1. 我试图找出如何围绕屏幕中心旋转平面。我发现最好的方法是将这个孩子变成一个中心节点,然后使用这行代码旋转中心节点:

        let OrbitCenter = SKAction.rotate(byAngle: CGFloat(-2 * Double.pi), duration: 3.8)
    

    当我拿走Double.pi时,飞机移动的速度要慢很多但仍然如此 以同样的方式旋转。为什么我们需要使用Double.pi?

  2. 我希望其中一架飞机/ SKSpriteNodes倒置,所以我研究并找到了这个:PlaneBlue.zRotation = CGFloat(16.0)。同样,当我拿走Double.pi时,它会产生相同的效果,但它只是指向其他地方。

  3. 总的来说,我的两个问题是,Double.pi与M_PI相同,但只是Double.pi是使用它的新方法,或者它们是不同的。另外,为什么我们需要使用Double.pi / M_PI?

    提前谢谢你。

1 个答案:

答案 0 :(得分:3)

此示例中使用了

Double.pi,因为rotate(byAngle:duration:)radians中占据一个角度。 2π弧度等于一个完整旋转,或360度。您包含的代码是创建旋转动作,告诉平面每3.8秒旋转一次完整旋转。移除Double.pi只会导致它每3.8秒旋转一个较小的角度。

至于M_PIDouble.pi之间的差异,它们基本相同。后者更新,并匹配其他类型的类似常量,例如CGFloat.pi。这些其他常量允许您为其他数字类型获取正确类型的π值。 M_PI始终为Double,但CGFloat.piCGFloatFloat.piFloat等。

事实上,在您的代码中,切换到CGFloat.pi 可能允许您删除角度参数周围的CGFloat强制转换,如下所示:

let OrbitCenter = SKAction.rotate(byAngle: -2 * CGFloat.pi, duration: 3.8)