暂停和重新创建带有通知的计时器问题Swift

时间:2015-07-18 21:46:28

标签: ios xcode swift timer nstimer

所以我有两个计时器,一个可以提高分数,一个可以产生敌人。我使用通知来使计时器无效,然后我使用另一个通知重新创建计时器。当我退出然后打开应用程序时,会有两组敌人在彼此之上生成。我认为timerRecreate = true以及GameScene中的常规计时器也被调用。

GameViewController.swift文件:

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("pauseTimers:"), name:UIApplicationWillResignActiveNotification, object: nil)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("startTimers:"), name:UIApplicationDidBecomeActiveNotification, object: nil)
}
func pauseTimers(notification : NSNotification) {
    println("Observer method called")
    timer.invalidate()
    scoretimer.invalidate()
}

func startTimers(notification : NSNotification) {
    println("Observer method called")
    timerRecreate = true
}

GameScene.swift中的计时器代码

override func didMoveToView(view: SKView) {
    //Spawn timer for enemy blocks
    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true)

    //Timer for keeping score
    scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true)
}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    if timerRecreate == true {
        //Spawn timer for enemy blocks
        timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true)

        //Timer for keeping score
        scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true)
        timerRecreate = false
    }
    }

我认为问题是当你最初打开应用程序时,在退出它或第一次打开它之后,timerRecreate设置为true以及块的常规产生,因此产生了两组块同时。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

修正了它!我希望......

无论如何,我做了什么。我创建了另一个名为timerz的布尔值,并在发出DidBecomeActive通知时将其设置为false。同时,timeRecreate设置为true。这可以保证两个计时器组不会同时运行。在关于timRecreate是否为true的if语句中的update函数中,我将timeRecreate设置为false,将timerz设置为true。因此,重新创建计时器,然后它切换回产生它们的旧方式。我还把这个老方法产生在一个if语句中,关于timerz是true还是false。