cocos2d-iphone popScene:不完整的事件

时间:2012-04-21 17:16:17

标签: iphone ios cocos2d-iphone

所以我正在使用cocos2d开发iPhone游戏。

我正在使用pushScene从我的游戏场景转换到主菜单场景,因为我希望玩家能够从主菜单中恢复游戏玩法。如果他们确实选择继续,我会使用popScene。

麻烦似乎是,如果在推送游戏场景时事件“不完整”,则在弹出场景时,这些事件不会完成。更糟糕的是,他们在场景中留下了不能自己清除的文物。

示例:粒子爆炸效果(粒子“冻结”并且不会按设计消散),精灵淡出效果(精灵在某个透明度水平下仍然可见)。

我想我会期望popScene能够像推送场景那样完全恢复场景,但似乎是“放弃”当前正在运行的动作。

我如何实现目标?

2 个答案:

答案 0 :(得分:0)

我建议您将游戏播放图层和主菜单图层添加到与孩子相同的CCScene,而不是使用pushScenepopScene。当您需要显示菜单时,更改图层的可见性并暂停游戏区域中的所有内容。您可以尝试使用这些方法递归暂停/恢复游戏层的活动:

- (void)pauseSchedulerAndActionsRecursive:(CCNode *)node {
    [node pauseSchedulerAndActions];
    for (CCNode *child in [node children]) {
        [self pauseSchedulerAndActionsRecursive:child];
    }
}

- (void)resumeSchedulerAndActionsRecursive:(CCNode *)node {
    [node resumeSchedulerAndActions];
    for (CCNode *child in [node children]) {
        [self resumeSchedulerAndActionsRecursive:child];
    }
}

打电话给:

[self pauseSchedulerAndActionsRecursive:gamePlayLayer];

答案 1 :(得分:0)

我使用了Hailei的代码,但创建了一个适合我的类别。

<强> CCNode + additions.h

#import "CCNode.h"

@interface CCNode (additions)
-(void)pauseSchedulerAndActionsRecursive;
-(void)resumeSchedulerAndActionsRecursive;
@end

<强> CCNode + additions.m

#import "CCNode+additions.h"

@implementation CCNode (additions)
-(void)pauseSchedulerAndActionsRecursive {
    [self pauseSchedulerAndActions];
    for (CCNode *child in [self children]) {
        [child pauseSchedulerAndActionsRecursive];
    }
}
-(void)resumeSchedulerAndActionsRecursive {
    [self resumeSchedulerAndActions];
    for (CCNode *child in [self children]) {
        [child resumeSchedulerAndActionsRecursive];
    }
}
@end

因此,当暂停时,在游戏节点上调用pauseSchedulerAndActionsRecursive 之前向游戏节点添加“暂停菜单节点”(否则暂停节点也会暂停,因此无法使用)。