开发者

Cocos2d iPhone Game Remove menu from scene

I have written a few games using Cocos2d iPhone. In all of my previous games I would change scenes when I setup a CCMenu and then leave that scene when I was finished. In my current project, I need the menu to exist in my current scene and be able to open and then close the menu many times. For some reason, I can't seem to understand, removeChild will not remove t开发者_Go百科he menu. I have seen several examples online that show using removeChild, but it does not work for me. Below is my menu code, when the Start/CreateNewAccount button is pressed I want the current menu to be removed from the scene completely.

This is in my init method.

     CCMenuItemImage *Start = [CCMenuItemImage itemFromNormalImage:@"MakeLemonade.png" selectedImage:@"MakeLemonadePressed.png"
                                                            target:self
                                                       selector:@selector(CreateNewAccount:)];
     CCMenuItemImage *About = [CCMenuItemImage itemFromNormalImage:@"About.png" selectedImage:@"AboutPressed.png"
                                                            target:self
                                                            selector:@selector(About:)];
     Start.position = ccp(-175, -90);
     About.position = ccp(175, -90);

     CCMenu *MainMenu = [CCMenu menuWithItems: Start, About, nil];
    [Start runAction:[CCFadeIn actionWithDuration:1.0]];
    [About runAction:[CCFadeIn actionWithDuration:1.0]];
     [self addChild:MainMenu z:6];

}
return self;
}
-(void) BeginMenuLayer {

//this is not working


[self removeChild:MainMenu cleanup:YES];

}


In your init method you've declared MainMenu as a local variable. You're not setting it as a property, so you don't have a reference when you go to remove it later.

1) Make sure you have a property declared for it like this:

@property (nonatomic, retain) CCMenu *MainMenu;

2) Synthesize it at the top of your implementation:

@synthesize MainMenu;

3) Make sure you release it in your dealloc:

-(void)dealloc {
    self.MainMenu = nil;
    [super dealloc];
}

4) When you construct it, assign it to your property rather than a local variable:

self.MainMenu = [CCMenu menuWithItems: Start, About, nil];

Now you have a retained reference to the object, which you can pass later to removeChild:cleanup:.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜