I am currently trying to implement a timer for my sprite kit game, but I don't get it working. The initial value of the timer always remains the same.
I am assuming I need to update the label somehow/somewhere, but I don't know HOW and WHERE :? I don't get the point. Any ideas?
Here is my code within my GameScene Class
let levelTimerLabel = SKLabelNode(fontNamed: "Chalkduster")
var levelTimerValue: Int = 500
var levelTimer = NSTimer()
func startLevelTimer() {
levelTimerLabel.fontColor = SKColor.blackColor()
levelTimerLabel.fontSize = 40
levelTimerLabel.position = CGPoint(x: size.width/2, y: size.height/2 + 350)
addChild(levelTimerLabel)
levelTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("levelCountdown"), userInfo: nil, repeats: true)
levelTimerLabel.text = String(levelTimerValue)
}
func levelCountdown(){
levelTimerValue--
}
I would stick to
SKActions
for these kind of tasks in SpriteKit due to fact thatNSTimer
is not affected by scene's, or view's paused state, so it might lead you into troubles. Or at least, it will require from you to implement a pause feature in order to pause your timers in certain situations, like when user pause the scene, or receive a phone call etc. Read more here aboutSKAction
vsNSTimer
vsGCD
for time related actions in SpriteKit.Sounds like you need to update the label everytime
levelTimerValue
is changed. The easiest way would be something like this.