Cocos2d iPhone Game Удалить меню со сцены - PullRequest
0 голосов
/ 29 июля 2011

Я написал несколько игр, используя Cocos2d iPhone.Во всех моих предыдущих играх я менял сцены, когда устанавливал CCMenu , а затем покидал эту сцену, когда закончил.В моем текущем проекте мне нужно, чтобы меню существовало в моей текущей сцене, чтобы я мог открывать, а затем закрывать меню много раз.По какой-то причине я не могу понять, removeChild не удалит меню.Я видел несколько примеров онлайн, которые показывают использование removeChild, но это не работает для меня.Ниже приведен код моего меню, когда нажата кнопка Start / CreateNewAccount, я хочу полностью удалить текущее меню со сцены.

Это мой метод инициализации.

     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 Ответ

1 голос
/ 29 июля 2011

В вашем методе 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:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...