Beast_Code Beast_Code - 4 months ago 9
C Question

Swift Compiler error: 'Double' is not convertible to CGFloat

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
enter image description here

Answer

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)