我试图为我的游戏添加一个计时器,以便用户知道他们花了多长时间玩一个关卡。我发现我可以通过以下方式初始化计时器:
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对象,在每个级别的plist中保持一个单独的键值对,但这看起来很麻烦。
有没有更好的方法来跟踪用户在关卡中花费的时间?
答案 0 :(得分:1)
不是每次都进行计算(从当前时间减去开始时间),因为你所关心的只是一个经过的时间,只需要一个像NSTimeInterval elapsedTime
这样的变量从0开始并增加时间每次计时器开火。 (如果你想在你的例子中跟踪它到0.1秒,在显示它之前只需要除以10。)这样,你可以随时暂停它,它将从它再次启动之前的状态继续