繁体   English   中英

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

[英]Pausing and Recreating timers with notifications issue Swift

所以我有两个计时器,一个增加分数,另一个产生敌人。 我使用了一个通知来使计时器无效,然后使用另一个通知来重新创建计时器。 当我退出然后打开应用程序时,有两组敌人相互叠加生成。 我认为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以及常规生成的块,因此同时生成了两组块时间。 我怎样才能解决这个问题?

修复! 我希望...

无论如何,这就是我所做的。 我创建了另一个名为timerz的布尔值,并在发出DidBecomeActive通知时将其设置为false。 同时,timeRecreate设置为true。 这样可以确保两个计时器都将同时运行。 在有关timRecreate是否为true的if语句内部的更新函数中,我将timeRecreate设置为false并将timerz设置为true。 因此,重新创建了计时器,然后切换回生成它们的旧方法。 我还把生成它们的旧方法放在了有关timerz是true还是false的if语句中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM