2013-06-19 51 views
0

如何讓我的調度程序調用另一個實現文件ccLayer中的方法?如何從另一個cclayer實現文件安排方法

這裏是我的文件:

GameHUD.h 
GameHUD.m 
GameScene.h 
GameScene.m 

場景設置下GameScene.m

+(id) scene 
{ 
    CCScene *scene = [CCScene node]; 

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

    GameHUD *HUDLayer = [GameHUD node]; 
    [scene addChild:HUDLayer z:2]; 

    return scene; 
} 

我的計劃內GameHUD.m

[self schedule:@selector(movePlayerUp)]; 

的方法我想要在GameScene.m

-(void) movePlayerUp { 
    Player.position = ccp(Player.position.x, Player.position.y + 1); 
    Player.rotation = 0; 
} 

叫我還是新進入的Cocos2D和Kobold2D幾個月。我知道我需要開始改變我的'自我''GameLayer'但除此之外,我需要一些更多的幫助。謝謝。

+0

爲什麼你不加鐵漢作爲兒童GameScene?這將是更容易處理這些類之間的溝通...... – Bivis

回答

0

保存的指針GameScene在GameHUD,像這樣:

添加@property到GameHUD.h

@property (assign) GameScene *game; 

現在將其設置在您的場景中方法

+(id) scene 
{ 
    CCScene *scene = [CCScene node]; 

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

    GameHUD *HUDLayer = [GameHUD node]; 
    HUDLayer.game = GameLayer; 
    [scene addChild:HUDLayer z:2]; 

    return scene; 
} 

和使用屬性來調用調度:

[game schedule:@selector(movePlayerUp)]; 

您可以檢查是否遊戲是零,以避免錯誤太:

if(game!=nil) 
{ 
    [game schedule:@selector(movePlayerUp)]; 
} 
0

由於GameHUD作爲GameLayer在CCScene中作爲子項添加。你可以這樣做。

代替該線在GameHUD的:

[自時間表:@selector(movePlayerUp)];

替換行: CCScene *場景= self.parent

for(CCNode *child in scene.children){ 
    if([child isKindOfClass:[GameLayer class]]){ 
      if([child respondsToSelector:@selector(movePlayerUp)]){ 
      [(GameLayer *)child schedule:@selector(movePlayerUp)]; 
      break; 
     } 
    } 
} 
+0

作爲一個孩子添加GameHUD的問題是,我需要移動GameLayer CCLayer,因爲它遵循我的播放器CCSprite,這將移動我的GameHUD CCLayer不會它?代碼看起來像是過度殺毒一定是更簡單的方法。這一定是簡單的:( –

相關問題