从Cocos2d Hud层调用另一个方法

时间:2012-06-24 14:12:43

标签: iphone objective-c cocos2d-iphone box2d-iphone

我有两个类文件hudlayer.m和actionlayer.m

我有一个名为跳入hudlayer.m 的方法 我有一个名为 jumpone in actionlayer.m

的方法
-(void) jumpone {
    _heroBody->ApplyLinearImpulse(b2Vec2(_playerVelX/[_lhelper pixelsToMeterRatio], 1.25), _heroBody->GetWorldCenter()); 
}

另一个名为jump in hudlayer.m的方法

-(void)jump {
   ActionLayer *aob = [[ActionLayer alloc] init]; 
   [aob jumpone];
}

问题是当我从 actionlayer.m 调用Jumpone方法时,我的sprite跳转(即调用的方法)

我的动作方法层

- (id)initWithHUD:(HUDLayer *)hud
{
    if ((self = [super init])) {

        [self setupWorld]; 
    }
    return self;
}

但是当我从hudlayer.m 中通过跳转方法调用 jumpone时,它会失败并且我的应用程序崩溃了。 任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

每次调用jump时,都会创建一个ActionLayer的新实例。接下来,你建立了一个新的世界,一切都变得纠缠不清。此外,它的内存泄漏。

让ActionLayer成为HUDLayer的iVar并致电

   aob = [[ActionLayer alloc] init];

在HUDs init方法中。 别忘了在HUDLayer的dealloc中释放aob

答案 1 :(得分:0)

问题的最佳解决方案是为hudlayer&添加标签。行动层

例如:hudlayer.tag = 1; actionlayer.tag = 2;

然后只需使用getChildByTag

[[[[CCDirector sharedDirector]runningScene] getChildByTag:1]jumpone];