0

如何让我的调度程序调用另一个实现文件 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”,但除此之外我还需要更多帮助。谢谢。

4

2 回答 2

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)];
}
于 2013-06-26T16:31:44.853 回答
0

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

而不是这一行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;
        }
    }
}
于 2013-06-19T15:50:42.977 回答