将HUD添加到GameScene场景(Cocos2d)

时间:2012-02-17 02:56:53

标签: objective-c scope cocos2d-iphone

所以情况就是这样:我有一个GameScene课作为我游戏的主要场景。在我的实施中,我有+(id)scene,我的appdelegate使用runWithScene来运行游戏并调用该方法。

同样,我创建了一个ControlLayer类。我已将其编写为CCLayer子类,我的计划是将ControlLayer添加到主GameScene上。它有+(id)control开始。

现在,我不确定如何把它们放在一起。我尝试在ControlLayer中创建+(id)scene对象并使用addChild:z:ControlLayer放在上面。当我触摸它们时,我已经移动了操纵杆,就像它们应该的那样。我似乎遇到的问题是让我的玩家移动。

我已安排GameScene每帧调用checkJoystick:方法。但是,由于我在ControlLayer中声明了+(id)scene对象,显然checkJoystick无法访问我的ControlLayer对象。我还在标题中添加了ControlLayer对象,但显然+(id)scene也无法访问该标题。我已尝试将+(id)scene更改为-(id)scene,这会修复范围问题,但会导致错误。

基本上,我认为我的问题是:如何在ControlLayer中声明此GameScene对象,以便整个班级可以使用它?也许这会在init

1 个答案:

答案 0 :(得分:2)

试试这个。在您的GameScene类中,在.h文件中为ControllerLayer类添加成员变量。

在GameScene.h中

@property (nonatomic, retain) ControllerLayer* myControllerLayer; // don't forget to synthesize in Gamescene implementation

然后在你的GameScene +场景方法中,做一些像

这样的事情
CCScene* scene = [CCScene node];

GameScene* gameSceneLayer = [GameScene node];
[scene addChild:gameSceneLayer];

ControllerLayer* controllerLayer = [ControllerLayer node];
[scene addChild:controllerLayer];

gameSceneLayer.myControllerLayer = controllerLayer;

现在你的GameScene可以通过myControllerLayer属性访问ControllerLayer

注意:还有其他一些方法可以解决您的问题,例如使用[scene addChild:z:tag:]然后使用getChildByTag ......等等