2012-03-29 130 views
0

我試圖在我的遊戲中添加一個計時器,以便用戶知道他們花了多長時間玩關卡。伊夫想通了,我可以初始化定時器方式如下:在iphone遊戲中創建一個關卡的計時器

bool showTimer = YES; 
NSDate startDate; 
UILabel timerLabel; // initialized in viewDidLoad 

    -(void) showElapsedTime: (NSTimer *) timer { 
     if (showTimer) { 
      NSTimeInterval timeSinceStart; 

      if(!startDate) { 
       startDate = [NSDate date]; 
      } 

      timeSinceStart = [[NSDate date] timeIntervalSinceDate:startDate]; 
      NSString *intervalString = [NSString stringWithFormat:@"%.0f",timeSinceStart]; 
      timerLabel.text = intervalString; 

      if(stopTimer) {//base case 
       [timer invalidate]; 
      } 
     } 
    } 

    - (void) startPolling { 
     [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(showElapsedTime:) userInfo:nil repeats:YES]; 
    } 

我開始在viewDidLoad中的startPolling方法。當我運行應用程序時,我確實看到了計時器並跟蹤時間,但當我退出應用程序並重新輸入時,計時器不會暫停。我也不知道如何處理轉到另一個視圖(如選項菜單),然後回到這個視圖。我理解NSDefaults和NSCoding,並且我看到如何將計時器的當前值保存爲一個Coding對象,在每個級別保留一個單獨的鍵值對,但這看起來很麻煩。

有沒有更好的方式來跟蹤用戶在一個級別花費多長時間?

回答

1

而不是每次都進行計算(從當前時間減去開始時間),因爲所有您關心的是一個已用時間,只需要一個變量,如NSTimeInterval elapsedTime,您從0開始,並將時間添加到每次定時器啓動。 (如果你想跟蹤它到0.1秒,就像在你的例子中一樣,只需要在顯示它之前除以10)。這樣,你可以暫停它,只要你想要它,它會繼續從之前的地方,當它再次啓動。