実行中にonで呼び出すreplaceScene:
と、使用中のどのシーンでも呼び出されず、また、この操作の後、どのシーンも表示されなくなります。CCScene
CCDirector
CCTransition
dealloc
サンプルプロジェクトへのリンクはこちら
この動作を取得する最短の方法は、そのような方法です(問題を再現することを意味します):
SceneOne *destScene = [SceneOne node];
CCTransitionFade *transition = [[CCTransitionFade alloc]initWithDuration:2 scene:destScene];
[[CCDirector sharedDirector]replaceScene:transition];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[[CCDirector sharedDirector]replaceScene:[SceneTwo node]];
});
私の質問は: がCCTransition
によって実行されているときにシーンを置き換える実行可能な方法はありCCDirector
ますか?
CCDirector
シーン置換の終了を通知するデリゲート コールバックを実装しましたが、実行中に iPhone のホーム ボタンを押しても、これは呼び出されませんCCTransition
。
答えが「いいえ」の場合、下記の目標を達成するための cocos2d-iphone の方法はありますか?
applicationDidEnterBackground
元々、この問題は、 (バックグラウンド タスクとして) または の場合に「ロード シーン」を追加したかったときに発生applicationWillEnterForeground
しましたが、バックグラウンド実行とは関係ないことに気付きました。私の最終的な目標は、ゲームが Game Center 認証ハンドラーが呼び出されるのを待っている間、シームレスなユーザー エクスペリエンスを提供することです。バックグラウンドから復帰したアプリの最初から表示される「ロード シーン」で十分です (ユーザー インタラクションを防止するだけでなく、さまざまな方法で実行できますが、以前のゲーム UI はユーザーに表示されません)。ただし、このソリューションは上記の問題の影響を受けやすくなります。ユーザーがシーンの移行中にホーム ボタンをタップすると、ゲームをバックグラウンドから移動した後に非常に奇妙な画面が表示されます。
編集: さらに調査した結果、 中にシーンを置き換えるための満足のいく解決策が見つかりませんでしたが、@LearnCocos2D (Steffen に感謝) が提案したように、呼び出すのではなく、可視の に「読み込み」を追加することでCCTransition
上記の問題を解決しました。これは完全ではありません。シーンの遷移中に子を追加すると、奇妙な結果が発生したときに (実行時間の意味で) 狭いウィンドウがまだあるためです。ただし、シーンを置き換えるよりははるかに優れています。新しいデバイスは非常に高速であり、3GS よりも高速なデバイスで「ホーム ボタン」をクリックする問題を再現するのは非常に難しいため、3GS でゲームをテストする場合にのみ関係があることを述べたいと思います。replaceScene
CCLayer
CCScene
CCTransition