所以我正在使用cocos2d开发iPhone游戏。
我正在使用pushScene从我的游戏场景转换到主菜单场景,因为我希望玩家能够从主菜单中恢复游戏玩法。如果他们确实选择继续,我会使用popScene。
麻烦似乎是,如果在推送游戏场景时事件“不完整”,则在弹出场景时,这些事件不会完成。更糟糕的是,他们在场景中留下了不能自己清除的文物。
示例:粒子爆炸效果(粒子“冻结”并且不会按设计消散),精灵淡出效果(精灵在某个透明度水平下仍然可见)。
我想我会期望popScene能够像推送场景那样完全恢复场景,但似乎是“放弃”当前正在运行的动作。
我如何实现目标?
答案 0 :(得分:0)
我建议您将游戏播放图层和主菜单图层添加到与孩子相同的CCScene
,而不是使用pushScene
和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];
答案 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 之前向游戏节点添加“暂停菜单节点”(否则暂停节点也会暂停,因此无法使用)。