您可以停止計時器調用當你的遊戲暫停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