所以情况就是这样:我有一个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
?
答案 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 ......等等