Cocos2d iphone 菜单中的图层单例不显示

Cocos2d iphone 菜单中的图层单例不显示,cocos2d-iphone,Cocos2d Iphone,我制作了一个单件来处理游戏中的菜单更改(在菜单层次结构中导航)。我不知道为什么菜单没有显示。请看下面我的动物园类单件 动物园管理员h: @interface MenuManager : NSObject { MenuLayerTypes currentMenuLayer; CCLayer* runningLayer; CCLayer* oldLayer; } +(MenuManager*)sharedMenuManager; -(void)runMenuWithID:(MenuLayerTyp

我制作了一个单件来处理游戏中的菜单更改(在菜单层次结构中导航)。我不知道为什么菜单没有显示。请看下面我的动物园类单件

动物园管理员h:

@interface MenuManager : NSObject
{
MenuLayerTypes currentMenuLayer;
CCLayer* runningLayer;
CCLayer* oldLayer;
}

+(MenuManager*)sharedMenuManager;
-(void)runMenuWithID:(MenuLayerTypes)menuLayerID;

@end
MenuManager.m:

#import "MenuManager.h"

@implementation MenuManager
static MenuManager* _sharedMenuManager = nil;

+(MenuManager*)sharedMenuManager
{
@synchronized([MenuManager class])
{
    if (!_sharedMenuManager)
        [[self alloc] init];
    return _sharedMenuManager;

}
return nil;
}

+(id)alloc
{
@synchronized ([MenuManager class])                   
{
    NSAssert(_sharedMenuManager == nil,
             @"Attempted to allocated a second instance of the Menu Manager singleton");
    _sharedMenuManager = [super alloc];
    return _sharedMenuManager;                     
}
return nil;
}


-(id)init
{                                                  
self = [super init];
if (self != nil)
{
     Layer = kMainMenuLayer; // default menu type
}
return self;
}

-(void)runMenuWithID:(MenuLayerTypes)menuLayerID    {
//MenuLayerTypes oldMenuLayer = currentMenuLayer;
currentMenuLayer = menuLayerID;
oldLayer.tag = 321;


switch (menuLayerID)
{
    case kMainMenuLayer:
        CCLOG(@"main menu layer");
        runningLayer = [MainMenuLayer node];
        oldLayer = runningLayer;
        break;

    case kSettingsLayer:
        runningLayer = [SettingsLayer node];
        oldLayer = runningLayer;
        break;

    case kAckLayer:
        runningLayer = [AckLayer node];
        oldLayer = runningLayer;
        break;           

    default:
        CCLOG(@"Unknown ID");
        return;
        break;
}

MainMenuScene* mainMenuScene =  (MainMenuScene *)[[CCDirector sharedDirector] runningScene];

// checks to see if a menu layer is already displayed before replacing it
if (![mainMenuScene getChildByTag:321]) {
    [mainMenuScene addChild:runningLayer];
}
else    {
    [mainMenuScene removeChildByTag:321];
    [mainMenuScene addChild:runningLayer];
}
}
@end
同样在MainMenuScene的init中:

[[MenuManager sharedMenuManager] runMenuWithID:kMainMenuLayer]; 

如何解决此显示问题?

确保调用了所有方法并且
[MainMenuScene node]
返回非空层确保已将sharedMenuManager添加到场景中,或其他正在运行的CoCoCos2D节点。@YvesLeBorg:我真的不知道如何将SharedMenuScene添加到场景中。我认为上面的if-else条件可以解决这个问题,sharedMenuManager是一个公共类。请你进一步解释一下我应该如何把它添加到场景中。谢谢,我不使用场景,我有自己的模式来支持道德的对等。。。除了第一幕。我把它加在那个上面,它永远不会被替换。也许你可以让sharedMenuManager成为一个场景,并在需要时“推”它。不确定你的游戏设计。