2013-08-25 50 views
0

我正在制作一个cocos2d box2d游戏,有多个关卡。我用CCParticleSystem模拟了一个粉碎效果。每个关卡都有一个重放按钮。问题是在我的iPod touch上(4每当我按下关卡上的重播按钮时,它就会崩溃。 我重播的解决方案是:Cocos2d场景切换和替换问题

CCMenuItemImage *replay = [CCMenuItemImage itemWithNormalImage:@"replaybutton.png" selectedImage:@"replaybutton_pushed.png" block:^(id){ 
NSLog(@"*** REPLAY BUTTON PRESSED ***"); 
[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:[[self class] node]]]; 
}]; 

iOS的模拟器做它没有崩溃,但我真正的设备没有。 我无法调试,因为Xcode不能识别任何错误,如“EXC_BAD_ACCESS”。 我能看到的唯一的事情就是在日志中一个OpenGL错误:

OpenGL error 0x0501 in -[CCParticleSystemQuad postStep] 411 

同一种崩溃的发生也,如果我在一个水平发挥,回到主菜单,切换到另一个层次。

如果有人能帮助我,我会很开心。甚至找到崩溃的根源。

+0

您是否启用了异常断点? https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html。另外,请确保您在连接到Xcode的调试模式下在设备上运行游戏。如果这仍然没有显示任何东西,那么iOS可能会因为内存不足而关闭游戏。你使用多少内存?注意任何泄漏或保留周期。 –

+0

按下调试器继续,看看它是否继续?我有时会出现这种情况,它似乎是一个可恢复的错误 –

+0

谢谢。如果我内存不足,如何跟踪。这是可能的,因为在iPhone 5上我的应用运行良好。 – kommancs96

回答

0

我想问题是与 [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:[[self class] node]]];

尤其在场景中:[[self class] node]]。

你看到当我们调用replace场景时,现有的场景被销毁,这意味着它会被释放,所有这一切。现在,当您试图放回这个释放场景时,您会发生崩溃,并且由于它以动画形式运行,因此您甚至无法追溯它。

你可以做什么,或者至少尝试是创造这个场景的一个新实例,然后调用

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:newSceneInstanceOfTheSameClassYouJustCreated]; 

让我知道是否可行。

+0

你也可以在Xcode中启用僵尸来验证我刚才所说的。 –