如何从另一个cclayer实现文件中安排方法

时间:2013-06-19 11:09:33

标签: objective-c cocos2d-iphone kobold2d

如何让我的调度程序在另一个实现文件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。我知道我需要先将'self'更改为'GameLayer',但除此之外我需要更多帮助。感谢。

2 个答案:

答案 0 :(得分:0)

由于GameHUD作为GameBayer在CCScene中作为子项添加。你可以这样做。

而不是GameHUD中的这一行:

  

[自我安排:@selector(movePlayerUp)];

替换为行: CCScene * scene = self.parent

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

答案 1 :(得分:0)

在GameHUD中保存指向GameScene的指针,如下所示:

将@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)];
}