gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:13:28 25 4
gpt4 key购买 nike

所以我有两个计时器,一个用来增加分数,另一个用来生成敌人。我使用通知使计时器无效,然后使用另一个通知重新创建计时器。当我退出并打开应用程序时,会在彼此之上生成两组敌人。我认为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 以及定期生成 block ,因此生成了两组 block 同时。我该如何解决这个问题?

最佳答案

修好了!我希望...

无论如何,这就是我所做的。我创建了另一个名为 timerz 的 bool 值,并在发出 DidBecomeActive 通知时将其设置为 false。同时,timeRecreate设置为true。这保证了两个定时器组不会同时运行。在有关 timRecreate 是否为 true 的 if 语句内的 update 函数中,我将 timeRecreate 设置为 false,将 timerz 设置为 true。因此,计时器被重新创建,然后切换回旧的生成计时器的方式。我还将这种生成它们的旧方法放在 if 语句中,以判断 timerz 是 true 还是 false。

关于ios - 带有通知问题的 Swift 暂停和重新创建计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com