Обновление расписания 1 в ccTouchesMoved / Таймер паузы / Таймер возобновления - Cocos2d - PullRequest
0 голосов
/ 08 июня 2011

Я просто пытаюсь запланировать метод обновления один раз в ccTouchesMoved, но когда я добавляю это

if (isRotating == YES)
        {
            gTimer = 20;
            [self schedule:@selector(g:) interval:1];
        }

в ccTouchesMove он вызывает его при каждом перемещении касания. Есть ли способ сохранить его в ccTouchesMoved и вызвать его только один раз?

isRotating установлено в ДА в ccTouchesMoved.

Код:

- (void)g:(ccTime)delta
{
    gTimer--;

    if (gTimer == 0 && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}

Все, что я хочу сделать, - это вращать спрайт на фиксированный интервал, а затем удалять его, когда таймер равен 0, но я хочу удалить его, только если касание в данный момент вращает спрайт.

Здесь происходит приостановка / возобновление таймера. Если игрок начинает вращать спрайт, затем поднимает палец, таймер должен остановиться, а когда он снова коснется / повернет спрайт, таймер должен возобновиться.

Если мои объяснения не ясны, пожалуйста, не стесняйтесь попросить меня уточнить.

Методы таймера:

в .ч

ccTimer gTimer;

в .м

- (void)g:(ccTime)delta
{
    gTimer--;

    if (gTimer == 0 && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}

Также я установил таймер с помощью

if (isRotating == YES)
        {
            gTimer = 20;
            [self schedule:@selector(g:) interval:1];
        }

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Чтобы приостановить таймер, я просто использовал

[self unschedule:@selector(g:)];

, а затем, чтобы возобновить его, я использовал

[self schedule:@selector(g:)];

Кроме того, для планирования обновления в ccTouchesMoved я просто проверил, чтобы увидеть, если палец иперестал двигаться, не поднимаясь.

0 голосов
/ 08 июня 2011

Положите BOOL в вашем классе и поплавайте myTimer.

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    touched = YES;
}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    isRotating = YES;

    if(touched && isRotating)
    {
       gTimer = 20;
           [self schedule:@selector(g:) interval:0.03];
    }   
  }
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    touched = NO;
    [self unschedule:@selector(g:)];
}


- (void)g:(ccTime)delta
{
    myTimer +=delta;

    if (myTimer >= gTimer && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...