问题:我有一个每2秒产生一次墙的游戏。当我按下主页按钮,然后回到我的游戏时,墙壁创建的模式被中断。我的理论是,当游戏通过主页按钮暂停时,游戏场景停止,但计时器不会停止并继续创建导致问题的墙壁。
我试图在游戏暂停时停止创建墙的计时器:
WallGenerationTimer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self , selector: "generateWall", userInfo: nil, repeats: true)
我检查了几个答案,但是当NSTimer坐在GameViewController中时我们都解释了解决方案,我无法从GameViewController访问GameScene中的NSTimer。答案基于使用从applicationWillResignActive
文件中的applicationDidEnterBackground
和AppDelegate.swift
函数发送通知,然后使用GameViewController中的观察者来停止其中的计时器。
但是,我的计时器在GameScene中,我无法弄清楚如何在游戏暂停时停止它。
我尝试了什么:
我尝试在GameScene
函数中的update
中添加一个观察者,并在通过applicationWillResignActive
和applicationDidEnterBackground
发送通知时调用函数,此函数会停止计时器由:
generationTimer?.invalidate()
这没有用,问题仍然存在。
答案 0 :(得分:0)
不要在SpriteKit中使用NSTimer。使用SKAction代替,因为当应用程序不再处于活动状态时,所有SKAction都会自动暂停。例如,您可以使用:
(SKAction *)performSelector:(SEL)selector onTarget:(id)target
带
(SKAction *)waitForDuration:(NSTimeInterval)sec
并按顺序运行一次
[self runAction:[SKAction sequence:@[action0, action1]]];
或永远
SKAction *myActionSequence = [SKAction sequence:@[action0, action1]];
[self runAction:[SKAction repeatActionForever:myActionSequence]];