您可以停止计时器调用当你的游戏暂停func invalidate()
,然后当你的游戏取消暂停重新启动它。
更新:
您可以添加触发在从下火和暂停的时间差第二定时器,第二定时器应触发第一个计时器,然后第一计时器重置为初始时间。
步骤:
添加可以说是激发每2秒
当游戏暂停计时器,计算从timer.fireDate
和timeOfPause
,时间间隔应该是intervalTillNextTrigger
添加触发在intervallTillNextTrigger
,不应该重复
第二
当afterPauseTimer
被调用时,触发第一个定时器timer.fire()
,无效timer
,因为timer.fire()
不会中断它的正式烧成时间表,2秒发射间隔再加timer
和无效afterPauseTimer
。
见下面的代码:
//
// ViewController.swift
// swft ios
//
// Created by Marius Fanu on 30/12/14.
// Copyright (c) 2014 Marius Fanu. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
var timer: NSTimer!
var isPaused = false
var isAfterPause = false
var intervalTillNextTrigger: NSTimeInterval = 0
var afterPauseTimer: NSTimer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = NSTimer(timeInterval: 2, target: self, selector: Selector("timerTriggerd"), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
timer.fire()
}
@IBAction func pauseButtonPressed(sender: UIButton) {
var now = NSDate()
println("now = \(now)")
if isPaused == true {
if isAfterPause {
isAfterPause = false
afterPauseTimer = NSTimer(timeInterval: intervalTillNextTrigger, target: self, selector: Selector("timerAfterIntervalTrigger"), userInfo: nil, repeats: false)
NSRunLoop.mainRunLoop().addTimer(afterPauseTimer, forMode: NSDefaultRunLoopMode)
}
timer = NSTimer(timeInterval: 2, target: self, selector: Selector("timerTriggerd"), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
}
else {
isAfterPause = true
intervalTillNextTrigger = timer.fireDate.timeIntervalSinceDate(now)
println("till next trigger \(intervalTillNextTrigger)")
timer.invalidate()
timer = nil
}
isPaused = !isPaused
}
func timerTriggerd() {
NSLog("Triggerd!")
}
func timerAfterIntervalTrigger() {
println("reset timer")
timer.fire()
timer.invalidate()
timer = nil
timer = NSTimer(timeInterval: 2, target: self, selector: Selector("timerTriggerd"), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
afterPauseTimer.invalidate()
afterPauseTimer = nil
}
}
哦伪善,世界需要更多的“笨鸟先飞”的克隆,我们要赶上的“2048”克隆的绝对数量。对不起,无法抗拒:-) – paxdiablo
为什么你不能停止计时器,并重新开始播放时再次启动它? –
是的,就像@MidhunMP说的那样,当你暂停并在播放时重新安排一个新的计时器时就停止计时器 – Paulw11