Cocos2D iPhone-从CCLayer在主场景上运行方法

Cocos2D iPhone-从CCLayer在主场景上运行方法,iphone,ios,cocos2d-iphone,Iphone,Ios,Cocos2d Iphone,我在游戏中有这个主场景,我调用了菜单,用户可以在其中选择新比赛的参数(玩家数量、难度等) 此菜单是在CClayer上创建的,并使用以下命令显示在主场景顶部: CCLayer *menu = [Menu node]; id actionFadeIn = [CCFadeIn actionWithDuration:0.3]; [menu runAction:[CCSequence actions:actionFadeIn, nil]]; [self addChild:menu z:1 tag:th

我在游戏中有这个主场景,我调用了菜单,用户可以在其中选择新比赛的参数(玩家数量、难度等)

此菜单是在CClayer上创建的,并使用以下命令显示在主场景顶部:

CCLayer *menu = [Menu node];

id actionFadeIn = [CCFadeIn actionWithDuration:0.3];
[menu runAction:[CCSequence actions:actionFadeIn, nil]];

[self addChild:menu z:1 tag:theMenu];
这个菜单的类有一个基本的逻辑。对于该菜单上选择的每个参数,将在单例上设置一个适当的参数。现在用户已经选择了所有参数,它将按下开始游戏按钮

当这种情况发生时,菜单必须消失,一个名为startGame的方法必须在主场景中运行,但这是我的问题:如何从菜单类运行该方法?我想我能做到

CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
[currentScene startGame];
但我不能这样做,因为当前场景本身不是实例,它的每个方法只能从场景内部运行,而不能从外部运行

我曾想过使用通知发布命令,在类上运行该方法,但这听起来很蹩脚,就像用大炮杀死苍蝇一样。如何在Cocos中实现这一点的最佳方式


谢谢。

我认为消失菜单很简单,您只需在同一层即菜单上调用消失方法即可。现在,当您按下开始按钮时,可以调用菜单类中的一个方法,比如说
startPressed

- (void)startPressed{
   [[self parent] start];
}

菜单层的父层是您的游戏层。

我在下面的帖子中对您的问题有一个非常详细的答案:


你基本上把你的场景变成了“半单身”。如果您喜欢不同的方法,也会解释其他方法。

什么是“currentScene本身就是一个类”?不是类,抱歉,我是说,是cclayer的子类。我已经对它进行了重新表述。你的意思是,你使用菜单,为下一场游戏设置配置(我想菜单按钮会在不同的代理上启动),你需要告诉该层重新加载一个新游戏,对吗?为什么不在运行游戏的CCLayer类上创建一个静态单例,在新游戏“+(void)startNewGame”的类上创建一个静态方法,其中该静态方法将命令传递给在其init中设置的静态单例?这可能不是最好的方法,但如果这正是你想要的,那就应该做到。你是什么意思?要将主场景(称为菜单的场景)创建为单体场景吗?(是,菜单对象类是自己的菜单委托)。