Swift编译错误:'Double'不能转换为CGFloat

时间:2014-07-30 02:54:40

标签: ios c xcode swift

我刚开始学习Swift。我创建了一个游戏项目,并出现了一个模板。我没有对代码做任何事情。我试图运行该项目但是弹出了编译器错误。

我要去一个教程,所以它可能是我的环境有问题,或者这本书已经过时了。

Swift编译错误:'Double'无法转换为CGFloat

import SpriteKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        let myLabel = SKLabelNode(fontNamed:"Chalkduster")
        myLabel.text = "Hello, World!";
        myLabel.fontSize = 65;
        myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

        self.addChild(myLabel)
    }

    override func mouseDown(theEvent: NSEvent) {
        /* Called when a mouse click occurs */

        let location = theEvent.locationInNode(self)

        let sprite = SKSpriteNode(imageNamed:"Spaceship")
        sprite.position = location;
        sprite.setScale(0.5)

        let action = SKAction.rotateByAngle(M_PI, duration:1)
        sprite.runAction(SKAction.repeatActionForever(action))

        self.addChild(sprite)
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}

错误发生在let action = SKAction.rotateByAngle(M_PI, duration:1)

以下是项目设置的屏幕截图 enter image description here

3 个答案:

答案 0 :(得分:49)

您可以使用CGFloat(M_PI)转换它。

例如,以下代码适用于您的情况(请注意使用CGFloat

let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)

答案 1 :(得分:0)

您可以在代码中声明这样的pi:let π = CGFloat(M_PI),然后使用let action = SKAction.rotateByAngle(π, duration:1)

如果你要使用π很多,那就更简单了。

您可以使用快捷键alt + p

键入π

答案 2 :(得分:-2)

旧的M_PI是Double,但函数确实期望CGFloat。演员阵容将成为解决方案。

let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)

关于Swift 5,现在就是:

let action = SKAction.rotate(byAngle: .pi, duration:1)

不再需要施放