I just began learning Swift. I created a game project and a template came up. I have not done anything to the code whatsoever. I tried to run the project but a compiler error popped up.
I'm going off a tutorial so it could be something wrong with my environment or the book is already outdated.
Swift Compiler error: 'Double' is not convertible to 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 */
}
}
The error occurs in let action = SKAction.rotateByAngle(M_PI, duration:1)
Here is a screenshot of the project settings
You can convert it with CGFloat(M_PI)
.
For example the following code should work in your case (note the use of CGFloat
)
let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)
You can declare pi like this in your code : let π = CGFloat(M_PI)
and then use let action = SKAction.rotateByAngle(π, duration:1)
If you are going to use π a lot, it's way more simple.
You can type π with the shortcut alt+p
The old M_PI was a Double, but the function did expect a CGFloat. A cast would be the solution.
let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)
With respect to Swift 5 it would be now:
let action = SKAction.rotate(byAngle: .pi, duration:1)
No need to cast anymore
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.