我在 Cocos2d 中的一个项目在这里遭受痛苦。我创建了一个小项目来隔离我的“误解”的核心。
下面是一个非常简单的代码,它创建了两个独立的场景并假装重用了第一个场景的孩子。我在使用 ARC 的项目中使用 cocos2d v2。
CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello ARC World" fontName:@"Marker Felt" fontSize:64];
CCScene *scene1 = [HelloWorldLayer scene];
CCScene *scene2 = [HelloWorldLayer2 scene];
[director_ pushScene: scene1];
// I add my label to the main layer of my scene1.
[[scene1 getChildByTag:1] addChild:label];
//I reset my own scene1 pointer to make sure only the director points to it.
//scene1 = nil;
// I replace the scene, and hope that the old scene1 will be killed by cocos
[director_ replaceScene: scene2];
// When I want to reuse my "label" object, I get the "child already added..." exception
[[scene2 getChildByTag:2] addChild:label];
为什么这是错误的?我已经读过我不应该与 RemoveAllChildren 之类的东西混在一起,因为 replaceScene 应该为我完成所有的工作。我在这里假设一些根本错误的事情吗?是否严格禁止不同场景之间的物体重复使用?