我已经制作了一个有趣的鸟类克隆,但在尝试实现暂停功能时,我遇到了我的NSTimer的问题,它产生了管道。
var timer = NSTimer.scheduledTimerWithTimeInterval(moveSpeed, target: self, selector: Selector("makePipes"), userInfo: nil, repeats: true)
由于NSTimers无法暂停,在makePipes()函数中我实现了一个简单的if语句,检查游戏是否暂停,如果是,则不会产生新的管道。然而,由于计时器在暂停状态期间仍然点火,因此每个管道系列之间的间隙是不一致的。
此外,当从菜单转换到游戏状态时,计时器会触发关闭时间,快速连续创建前两个管道。
NSTimer是否有替代方案来处理此功能?
答案 0 :(得分:0)
您可以在游戏暂停时停止呼叫func invalidate()
的计时器,然后在游戏暂停时重新启动计时器。
更新
您可以添加第二个计时器,该计时器会在与下一个火灾和暂停时间的差异时触发,第二个计时器应该触发第一个计时器,然后将第一个计时器重置为初始时间。
步骤:
添加让我们说一个每2秒触发一次的计时器
暂停游戏时,请计算timer.fireDate
和timeOfPause
的时间间隔,该时间间隔应为intervalTillNextTrigger
添加在afterPauseTimer
触发的第二个intervallTillNextTrigger
,不应重复
调用afterPauseTimer
后,使用timer.fire()
触发第一个计时器,使timer
无效,因为timer.fire()
不会中断正常的点火计划,添加{ {1}}再次使用2秒的触发间隔并使timer
无效。
请参阅以下代码:
afterPauseTimer