M_PI/Double.pi 是做什么用的,我们为什么要使用它?斯普里特基特

  • 本文关键字:Double PI pi 我们 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时,它具有相同的效果,但它只是指向其他地方。

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

提前谢谢你。

此示例中使用Double.pi,因为rotate(byAngle:duration:)的角度以弧度为单位。 2π弧度等于一整圈,即360度。您包含的代码是创建一个旋转动作,告诉飞机每 3.8 秒旋转一次完整旋转。移除Double.pi只是导致它每 3.8 秒旋转一个较小的角度。

至于M_PIDouble.pi之间的区别,它们基本相同。后者较新,并匹配其他类型的类似常量,例如CGFloat.pi。这些其他常量允许您为其他数值类型获取正确键入的 π 值。M_PI一直是一个Double,但CGFloat.pi是一个CGFloatFloat.pi是一个Float,等等。

事实上,在代码中,切换到CGFloat.pi可能会允许删除围绕角度参数的CGFloat投射,如下所示:

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

最新更新