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

时间:2012-03-02 21:58:22

标签: 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:theMenu];

这个菜单的类有一个基本逻辑。对于在该菜单上选择的每个参数,在单例上设置适当的参数。现在用户已经选择了所有参数,它将按下START GAME按钮。

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

CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
[currentScene startGame];

但我不能这样做,因为当前场景本身不是一个实例,它的每个方法只能从内部场景运行,而不能从外部运行。

我想过使用通知发布一个命令来运行该类的方法,但这听起来很蹩脚,就像使用大炮来杀死苍蝇一样。如何在科科斯做到这一点的最佳方式?

感谢。

2 个答案:

答案 0 :(得分:1)

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

Accessing Objects in other Layers (cocos2d)

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

答案 1 :(得分:0)

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

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

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