【发布时间】:2015-07-18 21:46:28
【问题描述】:
所以我有两个计时器,一个用来增加分数,一个用来生成敌人。我使用通知使计时器无效,然后我使用另一个通知来重新创建计时器。当我退出然后打开应用程序时,有两组敌人在彼此之上生成。我认为 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 以及块的常规生成,因此生成了两组块同时。我该如何解决这个问题?
【问题讨论】:
-
您正在将目标设置为 GameScene 的新实例 - 这应该是
self,并且通知方法也应该在 GameScene 中。 -
每次你调用
GameScene(),你都在创建一个新对象。您可能在某处有GameScene对象,然后您的得分计时器触发另一个GameScene对象,敌人时间触发另一个GameScene对象,...您应该创建一次GameScene对象,然后重用它 - 单例,GameViewController的财产,... -
你启动过计时器吗?
-
好的,现在编辑我的代码。
-
@JoshHamet
NSTimer.scheduledTimerWithTimeInterval自动启动计时器,只需阅读文档...
标签: ios xcode swift timer nstimer