如何让我的调度程序在另一个实现文件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',但除此之外我需要更多帮助。感谢。
答案 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)];
}