Swift:NSTimer替代品

时间:2014-12-30 07:40:01

标签: ios xcode swift nstimer

我已经制作了一个有趣的鸟类克隆,但在尝试实现暂停功能时,我遇到了我的NSTimer的问题,它产生了管道。

var timer = NSTimer.scheduledTimerWithTimeInterval(moveSpeed, target: self, selector: Selector("makePipes"), userInfo: nil, repeats: true)

由于NSTimers无法暂停,在makePipes()函数中我实现了一个简单的if语句,检查游戏是否暂停,如果是,则不会产生新的管道。然而,由于计时器在暂停状态期间仍然点火,因此每个管道系列之间的间隙是不一致的。

此外,当从菜单转换到游戏状态时,计时器会触发关闭时间,快速连续创建前两个管道。

NSTimer是否有替代方案来处理此功能?

1 个答案:

答案 0 :(得分:0)

您可以在游戏暂停时停止呼叫func invalidate()的计时器,然后在游戏暂停时重新启动计时器。

更新

您可以添加第二个计时器,该计时器会在与下一个火灾和暂停时间的差异时触发,第二个计时器应该触发第一个计时器,然后将第一个计时器重置为初始时间。

步骤:

  1. 添加让我们说一个每2秒触发一次的计时器

  2. 暂停游戏时,请计算timer.fireDatetimeOfPause的时间间隔,该时间间隔应为intervalTillNextTrigger

  3. 添加在afterPauseTimer触发的第二个intervallTillNextTrigger,不应重复

  4. 调用afterPauseTimer后,使用timer.fire()触发第一个计时器,使timer无效,因为timer.fire()不会中断正常的点火计划,添加{ {1}}再次使用2秒的触发间隔并使timer无效。

  5. 请参阅以下代码:

    afterPauseTimer