この質問は別の場所に投稿しましたが、SO は非常に優れたコミュニティであるため、ここでも投稿しています。
まず、Cocos2D 2.0-gles20 を使用して、マルチプレイヤー/チーム指向のゲームをまとめます。
GameKitHelper をアプリに統合しています。これまでのところ、iPhone4 と iPad2 およびシミュレーターでは問題なく動作していますが、iPod Touch 4th で使用しようとすると、[CCDirectorIOS startAnimation] でアサーションが発生します。必要なときに viewDidDisappear を呼び出しません。
これが重要な理由は、CCDirectorIOS クラスのこれらのメソッドにより、別の UIKit ビューが前面にある間に Cocos2D がアニメーションを開始/停止するためです。これは Cocos2D-0.99 で自分で管理したものですが、2.0 ではディレクター内で適切に処理されるため、各アプリで個別に処理する必要はありません。
GameKitHelper クラスには、GKMatchmakerViewController を画面にプッシュするための次のメソッドがあります。
-(void) showMatchmakerWithInvite:(GKInvite*)invite
{
GKMatchmakerViewController* inviteVC = [[[GKMatchmakerViewController alloc] initWithInvite:invite] autorelease];
if (inviteVC != nil)
{
inviteVC.matchmakerDelegate = self;
[self presentViewController:inviteVC];
}
}
-(UIViewController*) getRootViewController
{
return [CCDirector sharedDirector];
}
-(void) presentViewController:(UIViewController*)vc
{
UIViewController* rootVC = [self getRootViewController];
[rootVC presentModalViewController:vc animated:YES];
}
-(void) dismissModalViewController
{
UIViewController* rootVC = [self getRootViewController];
[rootVC dismissModalViewControllerAnimated:YES];
}
iPhone4 などで showMatchmakerWithInvite を呼び出すと、アニメーションを停止する CCDirectorIOS オブジェクトで viewDidDisappear: への呼び出しが表示されます。これで問題ありません。GK ビューがなくなると、アニメーションを再開する viewWillAppear の呼び出しが表示されます。甘い。
ただし、まったく同じプロジェクトを実行している iPod Touch では、viewDidDisappear への呼び出しは行われませんが、viewWillAppear への呼び出しは、GK ビューがなくなる前に行われます。
なぜ違いが生じるのか理解できません。すべてのデバイスで iOS 5.1.1 が実行されています。
あたかも iPod Touch では UIKit の動作が異なるように見えますが、それは信じがたいことです。私のもう1つの考えは、タイミングの問題を調べていたということでしたが、問題があってもアプリを実行し続けることができるようにコードを挿入しましたが、viewDidDisappearの呼び出しは発生しませんでした.
アニメーションの開始/停止を自分で管理することでこれを回避できると思いますが、Cocos2D コードをカスタマイズしない方がよかったと思います。
誰にもアイデアはありますか?
ありがとう