In my game (made with Cocos2d 2.0 + CocosBuilder) I added a class method loadWithLevelID:levelID
to the class GameObjectLayer that manages the gameplay elements:
@implementation GameObjectLayer {
G1LevelID * _levelID;
}
// load a Luminetic Land game object layer
+ (instancetype)loadWithLevelID:(G1LevelID*)levelID {
NSString * levelFileName = ... builds levelFileName from levelID;
GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
[gol setLevelID:levelID];
return gol;
}
- (void)setLevelID:(G1LevelID*)levelID {
_levelID = levelID;
}
So now I can create a GameObjectLayer typing
GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
In general, adding a "load" method to the classes that map ccbi files offers the following benefits:
- Only the class knows the name of its related ccbi file.
- The ccbi file to create a given class is referenced only once in the entire project.
- All the logic to set up an object (e.g. of type G1GameObjectLayer) is inside the object itself.
I think you can follow a similar approach with your CCScene subclass.