在Menu.h中首次启动方法"StartGame:"
,游戏无可挑剔。
然而,在游戏时间,如果用户返回菜单 - 我使用
[[CCDirector sharedDirector]replaceScene:[Menu scene]];
所有类型的动画冻结和计划功能都没有响应。
到底发生了什么事?
答案 0 :(得分:2)
您是否覆盖了这些方法中的任何一种?
-(void) onEnter;
-(void) onEnterTransitionDidFinish;
-(void) onExit;
-(void) cleanup;
如果是这样,请确保在每个方法中调用超级实现(即[super onEnter];
),否则会发生各种奇怪的事情。
答案 1 :(得分:2)
我不确定这是否是同一个问题,但我最近发现的是,如果我想使用replaceScene在两个场景之间进行交换,我希望将“旧”场景保持为单个可以换回到以后,对replaceScene的调用最终在那个场景上调用“清理”,这使得场景完好无损,除了任何具有块或选择器形式的处理程序的按钮(内部被块包裹)丢失了它们的处理程序当您换回“旧”场景时,它会变得没有反应。
我已经这样做了,每当用户从主菜单进入应用程序的另一部分时,应用程序并不总是创建全新的场景对象(以及他们所有的孩子)。
为了解决这个问题,我不得不重新设计,以便每次转换时都会重新创建场景,或者向CCDirector添加调整:
-(void) replaceScene:(CCScene*) scene andCleanup:(BOOL)andCleanup
到目前为止,我所做的是向CCDirector.replaceScene添加一个覆盖,它接受一个清理参数(类似于其他removeAndCleanup消息)。这允许有问题的应用程序在应用程序不希望清除时,在没有清除的情况下保留场景。
这方面的实施是:
-(void) replaceScene: (CCScene*) scene
{
[self replaceScene:scene andCleanup:YES];
}
-(void) replaceScene:(CCScene*) scene andCleanup:(BOOL)andCleanup
{
NSAssert( scene != nil, @"Argument must be non-nil");
NSUInteger index = [scenesStack_ count];
sendCleanupToScene_ = andCleanup;
[scenesStack_ replaceObjectAtIndex:index-1 withObject:scene];
nextScene_ = scene; // nextScene_ is a weak ref
}
如果有人认为这是一种愚蠢的方式,请告诉我。
答案 2 :(得分:0)
我也遇到了问题(在v3.1.1中)并且没有覆盖任何onEvent处理程序,因此调用super(如@ LearnCocos2D所示)在这里不适用。
我找不到修复。在调用replaceScene之前或之后调用导演的恢复功能,为我解决了这个问题。
[[CCDirector sharedDirector] replaceScene:scene];
[[CCDirector sharedDirector] resume];