当应用程序暂停时,GameScene中的NSTimer无效迅速

时间:2015-04-05 08:47:18

标签: ios sprite-kit nstimer

问题:我有一个每2秒产生一次墙的游戏。当我按下主页按钮,然后回到我的游戏时,墙壁创建的模式被中断。我的理论是,当游戏通过主页按钮暂停时,游戏场景停止,但计时器不会停止并继续创建导致问题的墙壁。

我试图在游戏暂停时停止创建墙的计时器:

WallGenerationTimer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self , selector: "generateWall", userInfo: nil, repeats: true) 

我检查了几个答案,但是当NSTimer坐在GameViewController中时我们都解释了解决方案,我无法从GameViewController访问GameScene中的NSTimer。答案基于使用从applicationWillResignActive文件中的applicationDidEnterBackgroundAppDelegate.swift函数发送通知,然后使用GameViewController中的观察者来停止其中的计时器。

但是,我的计时器在GameScene中,我无法弄清楚如何在游戏暂停时停止它。

我尝试了什么:

我尝试在GameScene函数中的update中添加一个观察者,并在通过applicationWillResignActiveapplicationDidEnterBackground发送通知时调用函数,此函数会停止计时器由:

generationTimer?.invalidate()

这没有用,问题仍然存在。

1 个答案:

答案 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]];