2011-01-25 23 views
5

Tôi đang cố gắng sử dụng trung tâm trò chơi: đa người chơiGame Center: Kết hợp đại biểu không được gọi là sau khi tìm thấy một trận đấu

Đến nay, người chơi được xác thực để Game Center, họ có thể gửi/đọc điểm, và acheivements. Đối với tính năng nhiều người chơi, tôi đã thử cả hai phương pháp: - sử dụng giao diện Trung tâm trò chơi để tìm kết quả phù hợp. - Tìm một trận đấu theo lập trình.

Đối với cả hai cách, tôi có vấn đề sau: kết hợp của đối tác phù hợp: trình phát: didChangeState: phương thức không được gọi. Trong tài liệu táo, nó được tuyên bố rằng đại biểu này được gọi nếu một người chơi được kết nối hoặc bị ngắt kết nối.

Trong trường hợp của tôi, đại biểu này không bao giờ được gọi. Tôi nghĩ rằng tôi đang thiếu một bước. tại đây sau khi triển khai ủy nhiệm của tôi (như được quy định trong tài liệu của apple).

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state 
{ 
    switch (state) 
    { 
     case GKPlayerStateConnected: 
      // handle a new player connection. 
      break; 
     case GKPlayerStateDisconnected: 
      // a player just disconnected. 
      break; 
    } 
    if (!self.matchStarted && match.expectedPlayerCount == 0) 
    { 
     self.matchStarted = YES; 
     // handle initial match negotiation. 
    } 
} 

và cũng là mã để tìm khớp.

-(void) findProgrammaticMatch 
{ 
    GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; 
    request.minPlayers = 2; 
    request.maxPlayers = 2; 

    [[GKMatchmaker sharedMatchmaker] findMatchForRequest:request 
           withCompletionHandler:^(GKMatch *FoundMatch, NSError *error) 
    { 
    if (error) 
    { 
     // Process the error. 
     StatusLabel.text = @"Match Not Found"; 
    } 
    else if (FoundMatch != nil) 
    { 
     MultiPlayerMatch = FoundMatch; // Use a retaining property to retain the match. 
     StatusLabel.text = @"Match Found"; 
     MultiPlayerMatch.delegate = self; // start! 
     // Start the match. 
     // Start the game using the match. 
     [self StartMatch]; 
    } 
    }]; 
} 

Cảm ơn sự giúp đỡ của bạn.

Trả lời

1

Nó đang hoạt động. Sự khác biệt duy nhất là ... khi bạn sử dụng lời mời, sự kiện "didChangeState" không được gọi. Bạn đang kết nối mà không cần thông báo và bạn có thể bắt đầu nhận dữ liệu. Tôi không bao giờ cố gắng gửi/nhận dữ liệu vì tôi đã dự kiến ​​sự kiện trước, nhưng tôi đã gửi một cái gì đó do nhầm lẫn một lần, và nó hoạt động.

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *) match {  
    //Dismiss window 
    [self dismissModalViewControllerAnimated:YES]; 

    //Retain match 
    self.myMatch = match; 

    //Delegate 
    myMatch.delegate = self; 


    //Flag 
    matchStarted = TRUE; 

    //Other stuff 
} 

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state { 
    //This code gets called only on auto-match 
} 

Mã trên hoạt động như mong đợi.

+0

Tôi không tin điều này là đúng. Tôi chỉ thử nghiệm với trận đấu tự động và didChangeState không bao giờ cháy. Chỉ doFindMatch. Tôi nghĩ didChangeState chỉ có thể xảy ra nếu người chơi vào GKPlayerStateUnknown và sau đó quay lại, hoặc nếu họ được thêm vào một trận đấu đang diễn ra. –

0

Tôi nghĩ didChangeState: GKPlayerStateConnected chỉ có thể xảy ra nếu người chơi là GKPlayerStateUnknown và sau đó quay lại hoặc nếu họ được thêm/mời quay lại trận đấu đang diễn ra.

Các vấn đề liên quan