我刚开始学习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)
以下是项目设置的屏幕截图
答案 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)
不再需要施放