2013-02-21 111 views
0

我一直试图将我的类分解为以GameOver和StageClear场景开始的较小部分。我的GameOver场景现在可以正常工作,但是我停留在StageClear场景中。经过研究,我发现this topic。基于这个话题,我结束了这段代码重用StageClear现场为我的游戏阶段:将字符串值传递给cocos2d中的场景名称

i++; 
NSString *go = [NSString stringWithFormat:@"Stage%i", i]; 
[[CCDirector sharedDirector]replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[NSClassFromString(go) scene]]]; 

有了这个代码,我想打电话给下一阶段。 (Stage1 - > clear game - > i ++ - > stage%i = stage2 - >转到Stage2。我的堆栈中出现了错误的访问错误代码1,特别是在转换(第三行)

断言失败 - [CCTransitionFade initWithDuration:场景:]

这究竟是为什么我在做什么错

+1

伙计们。真。 Cocos2d是开源项目。你可以自由地找到导致断言失败的代码。这种方法只有两个断言。一个是inScene是零,第二个是inScene和out场景是同一个对象。在发布问题之前,请在这里检查这两个案例... – Morion 2013-02-21 06:57:10

+0

我确定进出场景不是同一个对象,我也确定场景不是零,所以我不完全确定会发生什么在这。对不起,请问,并感谢您的时间。 – user1597438 2013-02-21 07:43:14

+0

像CCScene一样添加行newScene = [NSClassFromString(go)scene];并检查调试器,它不是零。或至少检查调试器,什么断言导致崩溃 – Morion 2013-02-21 07:47:04

回答

0

有可能使用字符串变量来代替现场

-(void)onEnter{ 

    [super onEnter]; 

    Class OtherLayerClassName = NSClassFromString(@"OtherLayer"); 
    [[CCDirector sharedDirector]replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[OtherLayerClassName scene]]]; 
} 

别忘了在这种情况下包含必要的文件OtherLayer.h