0

我做了一个单例来处理我的游戏中的菜单更改(通过菜单层次结构导航)。我不知道为什么菜单不显示。请在下面查看我的 MenuManager 类单例。

菜单管理器.h:

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

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

@end

菜单管理器.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]; 

如何解决这个显示问题?

4

0 回答 0