Reputation: 1315
I'm trying to addChild after 2 seconds the user touched the screen (it is inside touchesBegan), but it doesn't work. Am I doing anything wrong?
//show myLabel after 2 seconds
self.myLabel.position = CGPoint(x: self.frame.width / 1.1, y: self.frame.height / 2)
self.myLabel.text = "0"
self.myLabel.zPosition = 4
self.myLabel.runAction(SKAction.sequence([SKAction.waitForDuration(2.0), SKAction.runBlock({
self.addChild(self.myLabel)
)]))
Upvotes: 5
Views: 1098
Reputation: 29
You can declare this function, where you want
public func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
and using as:
delay(2.0) {
self.addChild(self.myLabel)
}
Upvotes: -1
Reputation: 151
The problem is that the actions won't run on myLabel unless it is in the scene, so change the last part into :
self.runAction(SKAction.sequence([SKAction.waitForDuration(2.0), SKAction.runBlock({
self.addChild(self.myLabel)
})]))
Or better:
self.runAction(SKAction.waitForDuration(2)) {
self.addChild(self.myLabel)
}
Note: I assume here that self is a scene or some other node that is already added to the scene.
Upvotes: 8