2013-03-21 89 views
0

这是一个有点简单的问题,但我无法弄清楚。第二次同样的CCScene被替换后游戏崩溃

1->应用程序启动(与MainMenu的场景)

2->开始(子水平场景被替换)

3->选择第一级(Level1Scene被替换。游戏开始。)

4->返回主菜单。 (MainMenu的场景被替换)

5->开始(子水平场景被替换)

6->选择第一级

7->崩溃。

框(32842,0x3f5c9d98)malloc:*对象0x4bed44错误:释放对象的校验和不正确 - 对象可能在释放后被修改。 *在malloc_error_break中设置一个断点来调试

当我把场景a换成b时,是不是发布了?

据我所知,只有pushScene在内存中保持场景。

+(CCScene *) scene { 

    CCScene *scene = [CCScene node]; 

    HelloWorldLayer *layer = [HelloWorldLayer node]; 

    [scene addChild: layer]; 

    return scene; 
} 

场景和图层是autorelease对象。必须在调用replaceScene时释放。 (如果在更换场景时先前的场景被释放)。

+1

只有第一次使用pushScene,然后使用replaceScene - – Guru 2013-03-21 11:36:21

+0

我仍然有同样的问题。当我回到MainMenu场景时,Level1Scene必须被释放。为什么我得到 malloc:***对象0x4da934错误:不正确的校验和对于释放的对象 - 对象可能在释放后被修改。 ***第二次更换游戏场景时,在malloc_error_break中设置断点以调试 ? – Quaso 2013-03-22 07:59:15

回答

0

我已经解决了这个问题。它的奇怪,但工程。

我有一个CCSprite的子类叫做Collectable的类。第二次更换具有可收集对象的场景时,它会崩溃。我现在将其转换为CCNode及其作品。

也许它可以帮助别人。