M_PI/Double.pi 有什么用,我们为什么要用它?雪碧套件

What is M_PI/Double.pi used for, and why do we use it? Spritekit

我正在使用 swift spritekit。

嗨,我有几个关于 M_PI 的问题,这是我最近了解到的。对于我的游戏,我一直在研究旋转事物的不同方法。基本上,在我的游戏中,屏幕中心周围有 2 个平面 "flying"。

注意:当我尝试使用 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. 我想要其中一个 planes/SKSpriteNodes 倒置,所以我研究并发现了这个:PlaneBlue.zRotation = CGFloat(16.0)。同样,当我拿走 Double.pi 时,它具有相同的效果,但它只是指向其他地方。

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

提前谢谢你。

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)