我用Cocos2d iPhone编写了一些游戏。在我以前的所有游戏中,当我设置 CCMenu 时我会改变场景,然后在我完成时离开那个场景。在我当前的项目中,我需要菜单存在于当前场景中,并且能够多次打开然后关闭菜单。出于某种原因,我似乎无法理解, removeChild 不会删除菜单。我在网上看过几个使用removeChild的例子,但它对我不起作用。下面是我的菜单代码,当按下Start / CreateNewAccount按钮时,我希望当前菜单完全从场景中删除。
这是我的init方法。
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];
}
答案 0 :(得分:1)
在init方法中,您已将MainMenu声明为局部变量。您没有将其设置为属性,因此在以后删除它时没有引用。
1)确保为此声明了一个属性:
@property (nonatomic, retain) CCMenu *MainMenu;
2)在实现的顶部合成它:
@synthesize MainMenu;
3)确保你在你的dealloc中释放它:
-(void)dealloc {
self.MainMenu = nil;
[super dealloc];
}
4)构造它时,将其分配给您的属性而不是局部变量:
self.MainMenu = [CCMenu menuWithItems: Start, About, nil];
现在您有一个对象的保留引用,您可以稍后将其传递给removeChild:cleanup:
。