cocos2d的 - 动作和动画未暂停(Cocos2d - Actions and Animatio

2019-10-18 16:28发布

当我这样做:

[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”暂停行动,但似乎并不如此。

Answer 1:

pauseSchedulerAndActions不是递归的,所以它只会影响您在暂停节点上的行动和计划,不是的孩子。

如果你的场景/层很浅,你很可能只是侥幸通过该层的孩子循环和调用(暂停/恢复)每个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



Answer 2:

尝试[[CCDirector sharedDirector] pause]; 应该暂停所有动画和动作。



文章来源: Cocos2d - Actions and Animations are not paused