Как запланировать метод из другого файла реализации 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;
}
}
}