Cocos2d iPhone游戏从场景中删除菜单

时间:2011-07-29 03:51:28

标签: iphone objective-c xcode cocos2d-iphone

我用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];

}

1 个答案:

答案 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: