2

私のプロジェクトにはオンラインプレイが必要です。

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

    GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
    mmvc.matchmakerDelegate = self;        
    [presentingViewController presentModalViewController:mmvc animated:YES];

上記のコードは GameCenter ビューを作成しました。「今すぐプレイ」という名前のボタンを押すと、「GKMatchDelegate の [- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state]」が呼び出されます。 、その作品は大丈夫です。

しかし今、私は「プログラムによる一致の検索」を使用する必要があり、公式ビューなしで直接一致を見つけます。

[[GKMatchmaker sharedMatchmaker]findMatchForRequest:request withCompletionHandler:^(GKMatch *hasmatch, NSError *error) {
        if(error)
        {
            NSLog(@"has error match!!!");
        }
        else if(hasmatch)
        {
            NSLog(@"has match!!!");//in test we really find the match.
            [presentingViewController dismissModalViewControllerAnimated:YES];
            self.match = hasmatch;
            self.match.delegate = self;
        }
    }];

「GKMatchDelegate の [- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state]」が機能しなくなりました。

オンライン対戦を始めるにはどうすればいいですか?

- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state {

if (self.match != theMatch) return;

switch (state) {
    case GKPlayerStateConnected: 
        // handle a new player connection.
        NSLog(@"Player connected!");

        if (!matchStarted && theMatch.expectedPlayerCount == 0) {
            NSLog(@"Ready to start match!");
            [self lookupPlayers];//i start game here
        }

        break; 
    case GKPlayerStateDisconnected:
        // a player just disconnected. 
        NSLog(@"Player disconnected!");
        matchStarted = NO;
        [delegate matchEnded];
        break;
}                 

}

4

0 に答える 0