ios - Pausing scene when game was interrupted -


another question: call function generates sprites per time. when interrupt game, example picking call or double-click home button , go task-manager, scene doesn't stop , continue calling function (oh, in function recall per random time, cause in didmovetoview calls once). how stop scene when game interrupted? thank you!

func spawnrocks(){   if gameover == 0{      score++     scorelabel.text = "\(score)"      let rockposition = arc4random() % uint32(self.frame.height/1.5)     var rockamount = cgfloat(rockposition) - self.frame.size.height/4      var rocktexture = sktexture(imagenamed: randomrock())     rock = skspritenode(texture: rocktexture)      rock.setscale(randomrockscale())      rock.position = cgpointmake(cgrectgetmidx(self.frame) + self.frame.size.width, cgrectgetmidy(self.frame) + rockamount)      var moverock = skaction.movebyx(-self.frame.size.width*2, y: 0, duration: nstimeinterval(randomrockmove()))     var removerock = skaction.removefromparent()     var moveremoverock = skaction.sequence([moverock, removerock])     rock.runaction(moveremoverock)     rockobject.addchild(rock)      nstimer.scheduledtimerwithtimeinterval(nstimeinterval(randomrockspeed()), target: self, selector: selector("spawnrocks"), userinfo: nil, repeats: false)  }  } 

you can try idea:

first of when app enter background applicationdidenterbackground call appdelegate can set 1 bool there nsuserdefaults can access anywhere project , set way:

func applicationdidenterbackground(application: uiapplication) {     nsuserdefaults.standarduserdefaults().setbool(true, forkey: "background")  } 

now in gameviewcontroller.swift make if false when load game again this:

override func viewdidload() {     super.viewdidload()      nsuserdefaults.standarduserdefaults().setbool(false, forkey: "background") } 

and can read nsuserdefaults in function , can stop if bool true way:

func spawnrocks(){      let background = nsuserdefaults().boolforkey("background")     if !background {          if gameover == 0{              score++             scorelabel.text = "\(score)"              let rockposition = arc4random() % uint32(self.frame.height/1.5)             var rockamount = cgfloat(rockposition) - self.frame.size.height/4              var rocktexture = sktexture(imagenamed: randomrock())             rock = skspritenode(texture: rocktexture)              rock.setscale(randomrockscale())              rock.position = cgpointmake(cgrectgetmidx(self.frame) + self.frame.size.width, cgrectgetmidy(self.frame) + rockamount)              var moverock = skaction.movebyx(-self.frame.size.width*2, y: 0, duration: nstimeinterval(randomrockmove()))             var removerock = skaction.removefromparent()             var moveremoverock = skaction.sequence([moverock, removerock])             rock.runaction(moveremoverock)             rockobject.addchild(rock)              nstimer.scheduledtimerwithtimeinterval(nstimeinterval(randomrockspeed()), target: self, selector: selector("spawnrocks"), userinfo: nil, repeats: false)         }     } } 

after when user open app again background can set bool false again appdelegate way:

func applicationwillenterforeground(application: uiapplication) {     nsuserdefaults.standarduserdefaults().setbool(false, forkey: "background") } 

hope you.


Comments