вставка задержки с cocos2d - PullRequest
       6

вставка задержки с cocos2d

5 голосов
/ 16 февраля 2011

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

 for (int i = 0; i < 6; i++) {

        NSString *cowryString;
        int prob = arc4random()%10;

        if (prob > 4) {
            count++;
            cowryString = @"1";
        }
        else {

            cowryString = @"0";
        }


        [self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:0.2] ,[CCCallFuncND actionWithTarget:self selector:@selector(cowryAppearWithString:data:) data:cowryString], nil]];

    }

метод, который делает метки, выглядит следующим образом:

-(void)cowryAppearWithString:(id)sender data:(NSString *)string {

CCLabelTTF *clabel = [CCLabelTTF labelWithString:string fontName:@"arial" fontSize:70];
CGSize screenSize = [[CCDirector sharedDirector] winSize];
clabel.position = ccp(200.0+([cowries count]*50),screenSize.height/2);
id fadeIn = [CCFadeIn actionWithDuration:0.5];
[clabel runAction:fadeIn];
[cowries addObject:clabel];
[self addChild:clabel];
}

Проблема с этим кодом заключается в том, что все метки появляются в один и тот же моментс той же задержкой.Я понимаю, что если я использую [CCDelayTime actionWithDuration:0.2*i] код будет работать.Но проблема в том, что мне может понадобиться повторить весь цикл for, чтобы метки появлялись снова после того, как они появились в первый раз.как возможно, чтобы действия появлялись с задержкой, а действия не всегда следовали одному и тому же порядку или итерациям ???

Ответы [ 2 ]

14 голосов
/ 17 февраля 2011

Может быть, я не совсем понял, что вы хотите сделать. Но если вам нужен некоторый контроль, когда появляются ваши ярлыки (чтобы что-то повторить), сделайте что-то вроде этого:

-(void) callback
{
    static int counter = 0;
    //create your label and label action here
    // iterate through your labels if required
    counter++;

    if (counter < 6)
    {
        double time = 0.2;
        id delay = [CCDelayTime actionWithDuration: time];
        id callbackAction = [CCCallFunc actionWithTarget: self selector: @selector(callback)];
        id sequence = [CCSequence actions: delay, callbackAction, nil];
        [self runAction: sequence];
    }
    else
    {
    //calculate the result and run callback again if required
    //don't forget to write counter = 0; if you want to make a new throw
    }

}
2 голосов
/ 17 февраля 2011

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

Изменение

        [self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:0.2] ,[CCCallFuncND actionWithTarget:self selector:@selector(cowryAppearWithString:data:) data:cowryString], nil]];

на

        [self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:0.2 * i] ,[CCCallFuncND actionWithTarget:self selector:@selector(cowryAppearWithString:data:) data:cowryString], nil]];

должно исправить вашепроблема

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