Как запланировать метод из другого файла реализации 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", но помимо этого мне нужна дополнительная помощь. Благодарю.

2 ответа

Решение

Сохраните указатель на 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)];
}

Поскольку GameHUD добавлен как ребенок в CCScene как GameLayer. Вы можете сделать это.

Вместо этой строки в GameHUD:

[self schedule: @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;
        }
    }
}
Другие вопросы по тегам