2012-08-27 14 views
6

Mam 2-osobową, opartą na systemie iOS turową grę, która korzysta z centrum gier i GKTurnbasedMatch.Zestaw gier dla systemu iOS Kolejny mecz Zaplanuj remonty

Czy istnieje sposób na programowe ponowne sprawdzenie przeciwnika po zakończeniu meczu?

Chciałbym dać graczom dostęp za jednym przyciskiem do rozpoczęcia nowego meczu.

Jeśli nie istnieje podejście jednoprzyciskowe, jakie są potencjalne alternatywy?

+1

Dobra wiadomość! Jest to teraz bardzo łatwe w użyciu z iOS6, wystarczy skorzystać z reatchWithCompletionHandler GKTurnBasedMatch. –

Odpowiedz

4

Rzeczywiście pojawia się pełny rozwiązanie programowe jest ignorowany przez Game Center. Bez wątpienia ból. Spróbuj wykonać następujące czynności w @selector (doRematchTap) ... albo jakiś odpowiednik:

NSMutableArray *playerIds = [NSMutableArray array]; 
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */; 
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/; 

    [playerIds addObject:myParticipant.playerID]; 
    if (otherPlayer.playerID) { 
     [playerIds addObject:otherPlayer.playerID]; 
    }// sanity check 

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

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request]; 
    tbmcv.showExistingMatches = NO; 
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */; 

    [self presentViewController:tbmcv 
         animated:YES 
        completion:^{ 
         }]; 

pamiętać o showExistingMatches = no, jaki przeskoczy kontroler widoku w prawo w trybie kojarzeń z poprawną obsługą wstępnie wybrana (wygląda na to) i nie pokazuje istniejących meczów użytkownika.

+0

Dzięki! Sztuką było ustawienie parametru showExistingMathes na NIE. Nie jest to dokładnie to, czego chciałem (użytkownik musi jeszcze kliknąć "Dalej" i "Wyślij", ale pozwala na znacznie łatwiejsze odświeżanie.) –

+1

iOS6 ma nowy interfejs API do przeprowadzania rewanżu bez konieczności korzystania z interfejsu centrum gier. GKTurnBasedMatch-> reatchWithCompletionHandler –

1

Nie mam całe rozwiązanie, ale pomysł dla Ciebie:

Każdy gracz ma wyjątkowy gracz-ID, które można uzyskać, jeśli przechowywać go z dala po

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

Teraz możesz uruchomić programowo nowy mecz i zaprosić tego gracza. Zostanie zapytany, czy chce rewanżu, a następnie można grać ponownie.

Wiem, że to niewiele z kodu lub konkretnej porady, ale może to wystarczająca informacja, aby znaleźć resztę w GameKit Class Reference.

Zastanawiam się, czy możesz to rozwiązać, powiedz mi, czy zrobiłeś to i powodzenia!

Edit:

Szukałem w references i stwierdziliśmy:

- (void) loadPlayerData: (NSArray *) identifiers 

nie próbował go samodzielnie, ale powinien dostać odtwarzacz ten sposób ponownie, jeśli zapisz jego identyfikator w tablicy i przekaż go do tej funkcji.

Mam nadzieję, że przyniesie pewne zmiany w iOS6 dla Game Center, które można zrobić swoje mecze programowo w swój własny sposób ...

+0

Nie sądzę, że jest to obecnie możliwe. Metodą, którą znam programistycznie zgłaszającą żądanie dopasowania, jest findMatchForRequest: withCompletionHandler. W dokumentacji znajduje się następujące oświadczenie: właściwość playersToInvite żądania meczu jest ignorowana; Aby zaprosić konkretny zestaw graczy do meczu, musisz wyświetlić standardowy interfejs użytkownika. –