0

hudlayer.m と actionlayer.m の 2 つのクラス ファイルがあります。

hudlayer.m にjumpという名前のメソッドがあり、 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 メソッドを呼び出すときです。私のスプライト ジャンプ (つまり、メソッドが呼び出されます)

アクションレイヤーの私のinitメソッド

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

        [self setupWorld]; 
    }
    return self;
}

しかし、hudlayer.m から jump メソッドを介して jumpone を呼び出すと、失敗し、アプリがクラッシュしました。どんな助けでも大歓迎です.thanks

4

2 に答える 2

0

問題の最善の解決策は、hudlayer と action レイヤーにタグを追加することです

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

そして、次のgetChildByTagように使用します:

[[[[CCDirector sharedDirector]runningScene] getChildByTag:1]jumpone];
于 2012-06-24T18:50:18.453 に答える
0

jump を呼び出すたびに、ActionLayer の新しいインスタンスが作成されます。それに続いて、新しい世界を設定すると、すべてがもつれます。さらに、そのメモリリーク。

ActionLayer を HUDLayer の iVar にして呼び出します

   aob = [[ActionLayer alloc] init];

HUD の init メソッドで。HUDLayer の dealloc で aob を解放することを忘れないでください

于 2012-06-24T18:32:09.270 に答える