2

私は自分のゲームのマルチプレイヤーを開発していますが、Cocos 2d 2.1 、iOS 6 を使用している次の問題に遭遇し、次のコードを使用してマッチメーカー (横向き) を表示しています。

 AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
    [[GCHelper sharedInstance] findMatchWithMinPlayers:2 maxPlayers:4 viewController:[app navController] delegate:self];

そして、それはそれがどのように見えるかですここに画像の説明を入力

その機能には次のコードが使用されます

- (void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers
             viewController:(UIViewController *)viewController
                   delegate:(id<GCHelperDelegate>)theDelegate {

if (!gameCenterAvailable) return;

matchStarted = NO;
self.match = nil;
self.presentingViewController = viewController;
delegate = theDelegate;
[presentingViewController dismissModalViewControllerAnimated:NO];

GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = minPlayers;
request.maxPlayers = maxPlayers;

GKMatchmakerViewController *mmvc =
[[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;

[presentingViewController presentViewController:mmvc animated:YES completion:nil];

}

4

2 に答える 2

0

これは、 をプッシュしようとしたときに発生しますがUIViewControllerアプリには UIView しかなく、 UIViewController はありません。推測させてください、あなたは持っていませんrootViewController

EAGLViewテンプレートから作業している場合は、 UIView の UIViewController を宣言する必要があります。これは次のように簡単です。

- (void) applicationDidFinishLaunching:(UIApplication *)application
{
  window.rootViewController = [[UIViewController alloc] init]; 
  window.rootViewController.view = glView; // MUST SET THIS UP,
  // NOW THE EAGLView HAS A UIViewController.

  [glView startAnimation];
}

次に、これらの GameKit のいずれかをプッシュしたいときはいつでも、 Window オブジェクトのメソッドをUIViewControllers使用しますpresentViewControllerrootViewController

例えば:

[self.window.rootViewController presentViewController:vc animated:TRUE completion:^(void){puts("DONE");} ] ;

バグがなくなり、ウィンドウが正しく形成されます。

于 2013-03-29T08:11:58.640 に答える
0

このコードは HelloWorldLayer にありますか? もしそうなら、それはディレクターが呼び出す最初のレイヤーですか? 私は同じ問題を抱えていますが、私のために作成された cocos2d テンプレートに厳密に従うと修正されます。つまり、IntroLayer を初期レイヤーとして使用し、そこから、ゲーム センターのコードがある HelloWorldLayer に移行します。ディレクターのロードが遅すぎることに関係していると思いますが、よくわかりません

于 2013-02-09T11:34:00.113 に答える