Hello everybody, I'd need a little help with the my game's level changing strategy.
I have the following GameScene class:
@interface GameScene : CCScene {
HUDLayer *hudLayer;
InputLayer *inputLayer;
Level *levelLayer;
PoorStudent *poorStudent;
}
@property (nonatomic, readwrite, assign) Level *levelLayer;
+ (GameScene *)sceneWithLevel:(int)levelNumber;
+ (GameScene *)sharedScene;
- (id)initWithLevelNumber:(int)levelNumber
@end
@implementation GameScene
@synthesize levelLayer;
static GameScene *instanceOfGameScene;
+ (id)sceneWithLevel:(int)levelNumber {
GameScene *scene = [[[GameScene alloc] initWithLevelNumber:levelNumber] autorelease];
return scene;
}
+ (GameScene *)sharedScene {
return instanceOfGameScene;
}
- (id)initWithLevelNumber:(int)levelNumber {
if ((self = [super init])) {
if (instanceOfGameScene == nil) {
instanceOfGameScene = self;
// Load all of the game's artwork
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"game-art.plist"];
poorStudent = [PoorStudent poorStudent];
hudLayer = [HUDLayer HUDLayerWithHealth:poorStudent.health andScore:0];
[self addChild:hudLayer z:1];
inputLayer = [InputLayer node];
[self addChild:inputLayer z:2];
levelLayer = [Level levelWithLevelNumber:levelNumber];
[levelLayer addChild:poorStudent z:0];
[self addChild:levelLayer z:0];
CGSize screenSize = [[CCDirector sharedDirector] winSize];
[poorStudent setPosition:ccp(poorStudent.contentSize.width, screenSize.height / 2)];
[levelLayer runAction:[CCFollow actionWithTarget:poorStudent worldBoundary:CGRectMake(0, 0, levelLayer.contentSize.width, levelLayer.contentSize.height)]];
[self scheduleUpdate];
}
}
return instanceOfGameScene;
};
which is a singleton class.
I use the sceneWithLevel method for the first call to the GameScene instance.
I'm trying to change the level by using the following method:
- (void)loadLevel:(int)levelNumber {
[self removeChild:levelLayer cleanup:YES];
levelLayer = [Level levelWithLevelNumber:levelNumber];
[levelLayer addChild:poorStudent];
}
but when I call it I've got the following error:
Assertion failure in -[Level addChild:z:tag:]
NSAssert( child.parent == nil, @"child already added. It can't be added again");
Could somebody help me with this, please?