Разработка iOS-понга, таймер не остановится - PullRequest
4 голосов
/ 10 января 2012

Я создаю простую игру в понг .. прямо сейчас я хотел установить таймер, который остановится после того, как я проиграю, и, возможно, сохраню значение в высокий балл, но, несмотря на то, что мне удалось установить таймер и включить его, похоже, он не хочет останавливаться.

Я реализовывал это с помощью этого урока: http://www.apptite.be/tutorial_ios_stopwatch.php

Прямо сейчас мой код выглядит так:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if (StavHry == StavHryPozastaven) {
        TapToBegin.hidden = YES;
        StavHry = StavHryAktivni;
    } else if (StavHry == StavHryAktivni) {
        [self touchesMoved:touches withEvent:event];
    }
    startDate = [NSDate date];

    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 target:self selector:@selector(updateTimer)userInfo:nil repeats:YES];
} 

- (void)updateTimer
{
    static NSInteger counter = 0;
    StopWatchLabel.text = [NSString stringWithFormat:@"Counter: %i", counter++];

    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss.SSS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    StopWatchLabel.text = timeString;
}

Я устанавливаю таймер, когда нажимаю на ярлык TapToBegin. но когда я проигрываю или выигрываю, таймер просто продолжает работать, даже несмотря на то, что я использовал функцию invalidate до запуска новой игры .. (когда я запускаю новую игру, она сбрасывается)

-(void)reset:(BOOL) novahra { //funkce reset
    self.StavHry = StavHryPozastaven;
    mic.center = self.view.center;
    if(novahra) {
        if(skore_hrac_hodnota < skore_pc_hodnota){
            TapToBegin.text = @"Protivnik Vyhrál, smůla!";
            [stopWatchTimer invalidate];
        } else {
            TapToBegin.text = @"Vyhráls! Gratulujem!";
            [stopWatchTimer invalidate];
        }
        skore_hrac_hodnota = 0;
        skore_pc_hodnota = 0;
    } else {
        self.StavHry = StavHryAktivni;
        //TapToBegin.text = @"Pokračuj!";
    }

    skore_hrac.text  = [NSString stringWithFormat:@"%d", skore_hrac_hodnota];
    skore_pc.text = [NSString stringWithFormat:@"%d", skore_pc_hodnota];
}

я знаю, что в учебнике показано больше строк кода для его действия остановки, но я попробовал больше опций, я дал ему все, что у него есть, но я думаю, что это единственная строка, которая останавливает таймер, поэтому он должен работать. но это не так.

Пожалуйста, помогите, у меня есть понедельник, чтобы закончить это, так что я немного волнуюсь.

1 Ответ

2 голосов
/ 10 января 2012

Что произойдет, если touchesBegan: вызывается более одного раза, а reset: не вызывается между ними? если это может произойти, вы, вероятно, потеряете таймер, который будет продолжать вызывать ваш updateTimer метод.

Я немного удивлен, если опубликованный вами код работает как метод таймера, который должен принимать аргумент. То есть измените ваш таймер на @selector(updateTimer:), а затем измените метод на - (void)updateTimer:(NSTimer *)timer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...