为iPhone游戏中的关卡创建计时器

时间:2012-03-29 02:05:03

标签: iphone objective-c ios timer

我试图为我的游戏添加一个计时器,以便用户知道他们花了多长时间玩一个关卡。我发现我可以通过以下方式初始化计时器:

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中保持一个单独的键值对,但这看起来很麻烦。

有没有更好的方法来跟踪用户在关卡中花费的时间?

1 个答案:

答案 0 :(得分:1)

不是每次都进行计算(从当前时间减去开始时间),因为你所关心的只是一个经过的时间,只需要一个像NSTimeInterval elapsedTime这样的变量从0开始并增加时间每次计时器开火。 (如果你想在你的例子中跟踪它到0.1秒,在显示它之前只需要除以10。)这样,你可以随时暂停它,它将从它再次启动之前的状态继续

相关问题