0

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

在 hudlayer.m 中有一个名为 jumpone 的方法,我在 actionlayer.m 中有一个名为jumpone的方法

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

以及在 hudlayer.m 中称为 jump 的另一种方法

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

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

我的action层的init方法

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

        [self setupWorld]; 
    }
    return self;
}

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

4

2 回答 2

0

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

让你将 ActionLayer 变成一个 HUDLayer 的 iVar 并调用

   aob = [[ActionLayer alloc] init];

在 HUD 的 init 方法中。不要忘记在 HUDLayer 的 dealloc 中释放 aob

于 2012-06-24T18:32:09.270 回答
0

您的问题的最佳解决方案是向 hudlayer 和操作层添加标签

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

然后getChildByTag像这样使用:

[[[[CCDirector sharedDirector]runningScene] getChildByTag:1]jumpone];
于 2012-06-24T18:50:18.453 回答