2011-01-25 5 views
0

ゲームの次のレベルをロードすることを目的としたメソッドを書きました。それは、レベルのインデックスを見つけ、レベルローダー(これは私が書いたクラス)からロードし、そのレベルを保持するレイヤーを作成し、新しいレイヤーと古いレイヤーの間の遷移をシーンに通知します。この時点でプレイヤースプライトは非表示になり、トランジション中に2人のプレイヤーがいないようにします。目的Cのメソッドが戻り値のコール(iPhone/cocos2dプロジェクト)のない中間関数を返しているようです

私たちは、時には、プレーヤーが目に見えなくなり、移行が行われないという問題に遭遇しました。多くの掘り出しをした後、私が知ったことは、メソッドに戻り値や他の呼び出しがなくても、メソッドが実行終了していないことです。

メソッド(それは何が起こっているか監視を支援するために、ログを今であるとして):

if([owningScene mayChangeLayer]) 
{ 
    NSLog(@"May change layer"); 
    levelFinished = YES; 
    NSLog(@"Level marked as finished"); 
    [carver setVisible:NO]; 
    NSLog(@"Carver hidden"); 
    GameState *state = [GameState sharedGameState]; 
    NSLog(@"game state loaded"); 
    state.screenXOffset += xOffset; 
    state.screenYOffset += yOffset; 
    NSLog(@"offset: %d, %d", state.screenXOffset, state.screenYOffset); 
    GameLevel *aLevel = [loader getLevelAtXOffset:state.screenXOffset 
      atYOffset:state.screenYOffset]; 
    NSLog(@"loaded level %@", aLevel); 

    GameLevelLayer *layer = [[GameLevelLayer alloc] initWithLevel:aLevel 
       withOwningScene:owningScene 
       withLevelLoader:loader 
       withHud:hud 
       showTitle:NO 
       startTileIndex:startIndex]; 
    NSLog(@"Got layer %@", layer); 
    [owningScene replaceLayer:layer xMove:xOffset yMove:yOffset]; 
    [layer release]; 
    NSLog(@"Done"); 


Log messages: 

     2011-01-24 21:38:03.541 Squirrel[14659:307] May change layer 
    2011-01-24 21:38:03.544 Squirrel[14659:307] Level marked as finished 
    2011-01-24 21:38:03.545 Squirrel[14659:307] Carver hidden 
    2011-01-24 21:38:03.547 Squirrel[14659:307] game state loaded 
    2011-01-24 21:38:03.550 Squirrel[14659:307] offset: 4, -22 

ログ・メッセージが表示されないのは、コードがGameLevelLayerで出て終了される*層= ...のように見えますその後も、あなたが見ることができるように、その時点以降はコードに明確に出口がありません。どのようなアイデアがこの問題を引き起こす可能性がありますか?

ありがとうございます! -Stephen

+0

「GameLevel * aLevel = [loader getLevelAtXOffset:state.screenXOffset atYOffset:state.screenYOffset];は、「ロードされたレベル...」というメッセージが表示されないため、問題の行です。それはクラッシュしますか? – arul

答えて

0

これは、または他の誰かを助けるかもしれないことがあります...ここで起こっていたことである。

GameLevelLoader、作成された新しいレベルで。そのレベルのオブジェクトは、私が予想していたよりも背が高く、ランダムに配置されていたときに、私はarc4random%を使って悪いことを起こしていました。私はなぜアプリケーションが無効な状態で実行し続けているのかわかりませんが、cocos2dプロジェクトは時にはそれを行う傾向があります(アサーションが失敗した後でも実行されます)。 arc4random()を実行する前に値> 0を確認するように修正しました。

関連する問題