Цель C: удаленно аннулировать таймер - PullRequest
0 голосов
/ 29 января 2011

Как сделать недействительным таймер в одном методе при вызове другого метода?В основном, когда вызывается tapFig, я хочу, чтобы он отправил сообщение на moveStickFig, чтобы сделать недействительным таймер

-(void) moveStickFig:(NSTimer *)timer {
    UIButton *stick = (UIButton *)timer.userInfo;
    CGPoint oldPosition = stick.center;
    stick.center = CGPointMake(oldPosition.x + 1 , oldPosition.y);
    if (oldPosition.x == 900) {
        [stick removeFromSuperview];
        healthCount--;
        NSLog(@"%d", healthCount);
        [healthBar setImage:[UIImage imageNamed:[NSString stringWithFormat:@"health%d.png",healthCount]]];
    }
}

-(void) tapFig:(id)sender {
    UIButton *stick = (UIButton *)sender;
    count++;
    score.text = [NSString stringWithFormat:@"%d", count];
    [stick removeFromSuperview];
    [stick release];
}

1 Ответ

1 голос
/ 29 января 2011

Я думаю, вам нужен флаг в moveStickFig, который устанавливает значение true при вызове tapFig.

-(void) moveStickFig:(NSTimer *)timer
{
    if( isTimerInvalidateSet )
    {
        [ self timer:invalidate ];
        return;
    }
    // ......
}

// you need to pass the same timer instance to `tapFig` that you earlier passed to `moveStickFig`.

-(void) tapFig:(id)sender
{
    isTimerInvalidateSet = true;
    [ self moveStickFig:theTimerInstance ] ; // theTimerInstance is same as earlier you passed to `moveStickFig`

    isTimerInvalidateSet = false;
    // ......
}

Примечание: Обычно вы устанавливаете таймер для повторного вызова функции с фиксированнойкадров в секунду.Таймер выполняет работу по вызову с такой скоростью.Нет необходимости повторно передавать экземпляр таймера.Если это то, что вы хотите, тогда ОК.However, if you need your game logic to be continued, you need to reset the isTimerInvalidateSet to false. Надеюсь, это поможет!

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