Cocos2d CCAction останавливается после нескольких запусков - PullRequest
0 голосов
/ 29 декабря 2011
-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super initWithColor:ccc4(255,255,255,255)] )) {
        [UIApplication sharedApplication].idleTimerDisabled = YES;
        imageArray = [[NSMutableArray alloc]init];
        winSize = [[CCDirector sharedDirector]winSize];
        [self addEverything];
        [self schedule:@selector(imageBlink) interval:5.0f];
    }
    return self;
}

-(void)imageBlink{
    int tagNum = (arc4random() %9 )+1 ;

    for (CCSprite *object  in imageArray) {

        if (object.tag == tagNum) {

            [object runAction: [CCSequence actions:[CCBlink actionWithDuration:2 blinks:1],[CCFadeOut actionWithDuration:2], nil]];
            [[SimpleAudioEngine sharedEngine]playEffect:@"slap.mp3"];

            NSLog(@"blink");
            return;
        }
    }
}

-(void)addImage{
    self.imageTag = 1;
    for (int i = 0; i <3; i++) {
        for (int j =0; j<3; j++) {
            image = [CCSprite spriteWithSpriteFrameName:@"0002.png"];

            NSLog(@"%d",imageTag);
            [image setTag:self.imageTag];
            self.imageTag ++ ;
            image.position = ccp(STAGE_WIDTH/(3)*(j)+35+41, STAGE_HEIGHT/(3)*(i)+115+41);
            [imageArray addObject:image];
            [image setVisible:NO];
            [self addChild:image z:2];

        } 
    }
}

Я запланировал вызов метода с именем imaged blink каждые 5 секунд.Метод заставил бы мой спрайт из массива мигать (появляться и исчезать).Но после нескольких звонков (около 10 и более) спрайт перестает мигать.Тем не менее, выход через NSLog "мигать" по-прежнему появляется с интервалами в 5 секунд.У меня эта проблема на эмуляторе iphone и на моем ipod.Спасибо за помощь.

1 Ответ

0 голосов
/ 30 декабря 2011

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

Еще одна вещь, которую я заметил, это то, что вы запускаете действие CCFadeOut. Имейте в виду, что после выполнения этого действия непрозрачность спрайта будет равна 0, а CCBlink изменяет свойство visible, но не влияет на непрозрачность. Это означает, что вы должны убедиться, что спрайт имеет максимальную непрозрачность перед началом последовательности:

[object stopAllActions];
object.opacity = 255;
[object runAction: [CCSequence actions:[CCBlink actionWithDuration:2 blinks:1],[CCFadeOut actionWithDuration:2], nil]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...