0

これはたまにしか起こりません。押されたときにメニュー項目によって呼び出されたメソッドのブレークポイントからステップアウトすると、メソッドの最後に到達し、ステップアウトすると、最終的にccTouchEndedに到達し、アクセス不良が発生します。デバッグ出力ウィンドウには何も表示されませんが、エラーメッセージとともにメインメソッドを指す緑色の矢印が表示されます。

これが発生する可能性がある理由はありますか?

ありがとう。

4

2 に答える 2

1

誰かが同じ問題を抱えている場合に備えて、何が起こっているのかを理解しました。複数の子を含む CCMenu がありました。子がタップされたとき、私はそれで必要なことを行い、CCMenuItem のセレクターとして渡したメソッドで removeChild:cleanup: を介して CCMenu から削除しました。問題は、Cocos2d がセレクター メソッドの実行中に CCMenuItem を非アクティブ化し、メソッドが終了すると再びアクティブ化することでした。したがって、メソッドでは、基本的に CCMenuItem を CCMenu から削除して破棄し、メソッドの最後で Cocos2d が再アクティブ化を試みましたが、メモリ内にありませんでした。

これを回避する方法はあまり見当たらないので、セレクター メソッドで CCMenu から CCMenuItem を削除することはできないかもしれません。

私がそれを回避した方法は、メニュー項目で setVisible:NO と setIsEnabled:NO を呼び出すだけでした。ただし、これが最善の方法ではない場合も想像できます。このような場合、z 位置などをいじって、メニュー項目を邪魔にならないようにすることができます。

とにかく、これが他の誰かに役立つことを願っています。私はこれにしばらく行き詰まっていることを知っています. :)

于 2012-06-23T05:48:25.280 に答える
0

私の謙虚な意見では、より良い解決策は、シーン破壊の呼び出しをスタックから巻き戻すことです。NSTimer+BlockKit のようなものを使用すると、非常にきれいになります。これが私のコードからの抜粋です:

- (void)menuAction
{
    // we use a timer here to delay the execution of the action because it
    // destroys the current scene and we're mid a call on CCMenu's ccTouchEnded
    // that isn't expecting a scene tear down
    // http://stackoverflow.com/questions/11165822/exc-bad-access-occurring-when-cocos2d-calls-cctouchended-in-ccmenu
    [NSTimer scheduledTimerWithTimeInterval:0 block:^(NSTimer* timer)
    {
       [[CCDirector sharedDirector] popSceneWithTransition:
         [CCTransitionSlideInL class] duration:kTransDur];
    }
    repeats:NO];
}
于 2013-11-09T18:45:07.777 に答える