0

我正在制作一个具有多个级别的 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

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

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

4

1 回答 1

0

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

特别是在场景中:[[self class] node]]。

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

您可以做或至少尝试的是创建此场景的新实例,然后调用

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

让我知道这是否有效。

于 2013-08-25T11:22:24.100 回答