0

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

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

问题似乎是,如果在游戏场景被推送时事件“不完整”,当场景被弹出时,这些事件不会完成。更糟糕的是,他们会在现场留下无法自行清除的伪影。

示例:粒子爆炸效果(粒子被“冻结”并且不按设计消散),精灵淡出效果(精灵在一定的透明度下保持可见)。

我想我本以为 popScene 会完全按照场景被推送时的状态恢复场景,但它似乎是“放弃”当前正在运行的动作。

我怎样才能实现我的目标?

4

2 回答 2

0

我建议您将游戏层和主菜单层都添加到与CCScenechildren 相同的位置,而不是使用pushSceneand popScene。当您需要显示菜单时,更改图层的可见性并暂停游戏图层中的所有内容。您可以尝试以下方法以递归方式暂停/恢复游戏层的活动:

- (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];
于 2012-04-25T06:18:45.900 回答
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,然后再将“暂停菜单节点”添加到游戏节点(否则暂停节点也会暂停,因此无法使用)。

于 2013-04-30T09:11:12.997 回答