2012-05-14 6 views
0

私はcocos2dを使用してゲームを作成しています。ここでは、ゲームを作成するときに呼び出されるメソッドは、次のとおりです。2回目のCCSceneの置き換え後にアプリケーションがクラッシュする

- (void)createGame 
{ 
    GameScene *newScene = [[GameScene alloc] initWithController:self]; //subclass of CCScene 

    if ([CCDirector sharedDirector].runningScene) 
     [[CCDirector sharedDirector] replaceScene:newScene]; 

    else 
     [[CCDirector sharedDirector] pushScene:newScene]; 

    scene = newScene; 

    //some controllers for some layers of my scene 
    box2d = [[Box2DController alloc] initWithParent:self]; 
    menu = [[MenuController alloc] initWithParent:self]; 
    controls = ([[ControlsController alloc] initWithParent:self]); 

    self.controllers = [[NSArray alloc] initWithObjects:box2d, menu, controls, nil]; 

    //some object, contains some parameters. rizeEvent tells about some event to all controllers. In this case, it sends pointer to worldState to all of them. 
    worldState = [[WorldState alloc] init]; 
    EventArgs *eventArgs1 = [[EventArgs alloc] initWithSender:self params:worldState]; 
    [self riseEvent:@"WorldStateUpdate" withArgs:eventArgs1]; 
} 

私は私の世界を破壊するボタンを、持っている、と新しいものを作成します。ここでは

- (void)onExitPressedWithArgs:(EventArgs *)e 
{ 
    [self destroyGame]; 
    [self createGame]; 
} 

は 'destroyGame' メソッドです:

- (void)destroyGame 
{ 
    [box2d release]; 
    [menu release]; 
    [controls release]; 
    [scene release]; 
    [worldState release]; 

    box2d = nil; 
    menu = nil; 
    controls = nil; 
    scene = nil; 
    worldState = nil; 

    [self.controllers release]; 
    self.controllers = nil; 
} 

私はアプリケーションを起動しています:

  1. 'createGame' は '再起動' ボタン
  2. を押す
  3. をいわゆる 'onExitPressedWithArgs'
  4. いわゆる 'destroyGame' と 'createGame' すべてが '再起動' ボタンを押すと細かい
  5. になり、作成した
  6. 新世界と呼ばれ、 'onExitPressedWithArgs'、 'destroyGame'、 'createGame'と呼ばれます。
  7. アプリケーションがクラッシュします。

常にケードのさまざまな部分でクラッシュしますが、常に「EXC_BAD_ACCESS」は例外です。

答えて

1

[self.controllers release];destroyGameから削除します。あなたはすでにself.controllers = nil;と呼ばれていますので、あなたのために必要な仕事をします。

+0

+1これに

self.controllers = [[NSArray alloc] initWithObjects:box2d, menu, controls, nil]; 

controllers = [[NSArray alloc] initWithObjects:box2d, menu, controls, nil]; 

2)、これを説明のためにrishiに – samfisher

+0

応答とアドバイスをありがとう。私はこれが自分の問題ではないと思うが、私はそれをやった。問題はなくなった。なぜそれがいつもarter * second * replacementにクラッシュするのですか? – SentineL

+0

あなたはNSZombieを使ってみましたか? – rishi

0

リシの提案に似ていますが、最初の割り当てにも問題があります。

1)この置換:と

[self.controllers release]; 
self.controllers = nil; 

[controllers release]; 
controllers = nil; 
関連する問題