Cocos2d 场景切换和替换问题

Posted

技术标签:

【中文标题】Cocos2d 场景切换和替换问题【英文标题】:Cocos2d scene switching and replacing issue 【发布时间】:2013-08-25 11:06:39 【问题描述】:

我正在制作一个具有多个级别的 cocos2d box2d 游戏。我正在使用 CCParticleSystem 模拟粉碎效果。我在每个级别都有一个重播按钮。问题是在我的 iPod touch(第 4 代)上它每次崩溃当我按下一个级别的回放按钮时。 我的重播解决方案如下:

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

如果我在一个关卡上玩并返回主菜单并切换到另一个关卡,也会发生同样的崩溃。

如果有人可以帮助我,我会非常高兴。甚至找到崩溃的根源。

【问题讨论】:

您是否启用了异常断点? developer.apple.com/library/ios/recipes/…。此外,请确保您在连接到 Xcode 的调试模式下在设备上运行游戏。如果这仍然没有向您显示任何内容,那么可能 iOS 正在关闭您的游戏,因为它的内存不足。你用了多少内存?注意任何泄漏或保留周期。 在调试器上按继续,看看是否继续?我有时会遇到这种情况,它似乎是一个可恢复的错误 谢谢。如果内存不足,我该如何跟踪。这是可能的,因为在 iPhone 5 上我的应用运行良好。 【参考方案1】:

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

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

当我们调用替换场景时,您会看到现有场景被破坏,这意味着它被解除分配等等。现在,当您尝试放回这个已解除分配的场景时,您会遇到崩溃,并且由于它是作为动画运行的,您甚至无法追溯它。

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

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

让我知道这是否有效。

【讨论】:

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

以上是关于Cocos2d 场景切换和替换问题的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2d 如何切换场景

replaceScene 是只替换当前场景还是替换 Cocos2d 中的所有场景

cocos2d 1.0 beta 两个场景之间的过渡和程序刚刚退出?

cocos2d第二次打开后无响应的场景

Unity场景切换

Cocos2d-X研究之3.0 场景切换特效汇总