ios - M_PI/Double.pi 的用途是什么?我们为什么使用它? Sprite 套件

标签 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. 我希望其中一个平面/SKSpriteNode 是颠倒的,所以我研究并发现了这个: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 度。您包含的代码正在创建一个旋转 Action ,告诉飞机每 3.8 秒旋转一整圈。删除Double.pi只是让它每 3.8 秒旋转一个较小的角度。

至于M_PI之间的区别和Double.pi ,它们基本上是相同的。后者较新,与其他类型上的类似常量匹配,例如 CGFloat.pi 。这些其他常量允许您获取其他数字类型的正确键入的 π 值。 M_PI始终是Double ,但是CGFloat.piCGFloat , Float.piFloat

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

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

关于ios - M_PI/Double.pi 的用途是什么?我们为什么使用它? Sprite 套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43315038/

相关文章:

ios - Swift 中的 ObjC 委托(delegate)回调

ios - 获取应用程序文件ios xcode 7/8

ios - 如何在 Xcode 8.2 的 Playground 项目中使用 Swift 从用户那里获取输入?

ios - AlamofireCoreData Pod

ios - 验证 bundle 时,错误提示 bundle 无效,但我确保它匹配

Swift 命令行工具未接收 DistributedNotificationCenter 通知

ios - 从另一个类更改按钮的状态

ios - 带有未在后台调用的请求 block 的 URLSession.datatask

ios - 平滑地旋转刷新按钮图像,使其完成到最近的转角 iOS

swift - ?= 运算符在 Swift 中有什么作用?