ゲームの次のレベルをロードすることを目的としたメソッドを書きました。それは、レベルのインデックスを見つけ、レベルローダー(これは私が書いたクラス)からロードし、そのレベルを保持するレイヤーを作成し、新しいレイヤーと古いレイヤーの間の遷移をシーンに通知します。この時点でプレイヤースプライトは非表示になり、トランジション中に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
「GameLevel * aLevel = [loader getLevelAtXOffset:state.screenXOffset atYOffset:state.screenYOffset];は、「ロードされたレベル...」というメッセージが表示されないため、問題の行です。それはクラッシュしますか? – arul