2012-02-17 108 views
1

所以情況如下:我有一個GameScene類作爲我的遊戲的主場景。在我的實現中,我有+(id)scene,我的appdelegate通過使用runWithScene並調用該方法來運行遊戲。將HUD添加到GameScene場景(Cocos2d)

同樣,我創建了一個ControlLayer類。我已將它寫爲CCLayer的子類,並且我的計劃是在主GameScene上添加ControlLayer。它有+(id)control來啓動它。

現在,我不確定如何把這一切放在一起。我已經嘗試在+(id)scene中創建ControlLayer對象,並使用addChild:z:將我的ControlLayer覆蓋。他們應該觸碰他們時,我所移動的操縱桿就會移動。我似乎遇到的問題是讓我的球員移動。

我已經安排GameScene每幀調用它的checkJoystick:方法。不過,由於我在+(id)scene中聲明ControlLayer對象,顯然checkJoystick無法訪問我的ControlLayer對象。我還在頭文件中添加了一個ControlLayer對象,但顯然+(id)scene無法訪問該對象。我試過將+(id)scene更改爲-(id)scene,這樣可以解決範圍問題,但會導致錯誤。

基本上,我想我的問題是:如何在我的GameScene中聲明這個ControlLayer對象,以便整個類都可以使用它?也許這將在init

回答

2

試試這個。在GameScene類中,爲ControllerLayer類的.h文件中添加一個成員變量。

在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

注意:有幾種其他方式可以解決您的問題,例如使用[場景addChild:z:tag:],然後使用getChildByTag ...等

+0

謝謝,爲我效勞! – nick 2012-02-18 23:45:02