2012-03-29 91 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)。这样,你可以暂停它,只要你想要它,它会继续从之前的地方,当它再次启动。