Cocos2d - Действия и анимации не приостановлены

Когда я делаю это:

[gameLayer pauseSchedulerAndActions];

Большая часть игры приостанавливается, но спрайты, которые проходят это действие, не приостанавливают вращение:

[sprite runAction:[CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration:5.0 angle: 360]]];

Кроме того, те спрайты, которые запускают CCAnimations, не прекращают анимацию:

CCAnimation *theAnim = [CCAnimation animationWithSpriteFrames:theFrames delay:0.1];
CCSprite *theOverlay = [CCSprite spriteWithSpriteFrameName:@"whatever.png"];                
self.theAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:theAnim]];

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

2 ответа

Решение

pauseSchedulerAndActions не является рекурсивным, поэтому он влияет только на действия и расписания на узле, который вы приостанавливаете, а не на дочерних элементах.

если ваша сцена / слой неглубокий, вы, вероятно, могли бы просто покончить с циклическим обходом дочерних слоев и вызывать (pause/resume)SchedulerAndActions для каждого, в противном случае, если у вас более глубокий график, вы, вероятно, захотите вызвать его рекурсивно. Я написал небольшой тест, и это сработало для меня:

-(void) pauseSchedulerAndActions: (BOOL) pause forNodeTree:(id)parentNode shouldIncludeParentNode:(BOOL)includeParent
{
    if(includeParent)
    {
        (pause) ? [parentNode pauseSchedulerAndActions] : [parentNode resumeSchedulerAndActions];
    }

    for( CCNode *cnode in [parentNode children] )
    {
        (pause) ? [cnode pauseSchedulerAndActions] : [cnode resumeSchedulerAndActions];

        if(cnode.children.count > 0)
        {
            [self pauseSchedulerAndActions:pause forNodeTree:cnode shouldIncludeParentNode:NO]; // on recurse, don't process parent again
        }
    }
}

так что в вашем случае вы можете попробовать вызвать этот метод и передать в свой gameLayer

Пытаться [[CCDirector sharedDirector] pause]; Следует приостановить все анимации и движения.

Другие вопросы по тегам