0

この質問は別の場所に投稿しましたが、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 コードをカスタマイズしない方がよかったと思います。

誰にもアイデアはありますか?

ありがとう

4

1 に答える 1

0

ええと、私はせっかちな人なので、他の人に任せて他のことに取り組むのではなく、それをやっつけました。

問題のiPodTouchデバイスでは、制限アプリでマルチプレーヤーゲームが無効になっていることがわかりました。これにより、GKビューが「適切に」表示されないようであり、その結果、viewDidDisappear:やviewWillAppear:などのイベントが期待どおりに発生しません。

そのため、Cocos2Dコードのすべての調整とインストルメンテーションを元に戻し、GameKitHelperクラスに修正を適用して、マルチプレーヤーなどの機能が無効になっている場合にプレーヤーがそれらを要求できないようにすることができました。 。

于 2012-07-01T14:21:33.260 に答える