Cocos2d iphone 菜单中的图层单例不显示
我制作了一个单件来处理游戏中的菜单更改(在菜单层次结构中导航)。我不知道为什么菜单没有显示。请看下面我的动物园类单件 动物园管理员h:Cocos2d iphone 菜单中的图层单例不显示,cocos2d-iphone,Cocos2d Iphone,我制作了一个单件来处理游戏中的菜单更改(在菜单层次结构中导航)。我不知道为什么菜单没有显示。请看下面我的动物园类单件 动物园管理员h: @interface MenuManager : NSObject { MenuLayerTypes currentMenuLayer; CCLayer* runningLayer; CCLayer* oldLayer; } +(MenuManager*)sharedMenuManager; -(void)runMenuWithID:(MenuLayerTyp
@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成为一个场景,并在需要时“推”它。不确定你的游戏设计。