2013-03-25 14 views
7

używam Apple's code pokazać GKGameCenterViewController:GKGameCenterViewController zawsze pokazuje Wyzwania zamiast Liderów

GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
if (gameCenterController != nil) { 
    gameCenterController.gameCenterDelegate = self; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

To jest tekst opisujący powyższy kod:

Gra Centrum UI jest wyświetlany przez Wyświetl kontroler (iOS)

Konwencja używana przez Game Kit jest przeznaczona dla jednego z kontrolerów widoku do przedstawienia Kontroler widoku zestawu gier. Twój kontroler widoku działa jako delegat do kontrolera widoku, który prezentuje, dzięki czemu można go poinformować, gdy gracz zakończy przeglądanie prezentowanego ekranu. Listing 2-1 pokazuje najczęstsze użycie tego wzorca, który ma pokazywać interfejs użytkownika Game Center. Kontroler widoku Game Center wyświetla wiele różnych elementów Game Center, więc większość gier powinna oferować przycisk, który przenosi gracza na ten ekran, nawet jeśli gra wyświetla zawartość Game Center za pomocą niestandardowego interfejsu użytkownika.

Kiedy używać zalecanego kod mam do tego ekranu (Challenges GameCenter), co nie jest to, co chcę:

GameCenter Challenges Screen

Próbowałem również ten kod:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]]; 

Korzystając z tego kodu, wyświetlam ekran, który oczekiwałam wyświetlić:

enter image description here

Czy źle zrozumiałem coś lub czy robię coś nie tak? Czy pierwszy fragment kodu nie powinien doprowadzić mnie do głównego menu? Dlaczego nie wyświetla tablic wyników?

UPDATE

I wdrożone viewState jak sugeruje phix23:

GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
if (gameCenterController != nil) { 
    gameCenterController.gameCenterDelegate = self; 
    gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

Ale to nadal wyświetla ekran samymi wyzwaniami, pomimo faktu, że chcę/spróbować, aby wyświetlić ekran liderów.

+0

Czy kiedykolwiek to rozgryzłeś? Mój 'GKGameCenterViewController' wydaje się zignorować również wartość' viewState'; zawsze otwiera się na tę samą zakładkę Game Center, niezależnie od tego, do czego ją ustawiam. – Michael

+0

Powodzenia na tym. Mój zawsze pokazuje tablicę liderów, gdzie mówię, żeby pokazać mi Achivements. – Alix

Odpowiedz

1

Urządzenie GKGameCenterViewController jest dostępne, ponieważ system iOS 6 może wyświetlać rankingi, osiągnięcia i wyzwania związane z aplikacją obsługującą centrum gier.

Możesz zmienić początkowy widok, ustawiając viewState z GKGameCenterViewController. Jeśli nie ustawisz tej właściwości, pokaże ona domyślny widok, który jest widokiem wyzwań w twoim przypadku. Domyślam się, że nie masz żadnych tabel liderów ani osiągnięć, więc nie ma nic do pokazania.

+0

phix23, patrz aktualizacja powyżej. // PeterK – PeterK

+0

spróbuj użyć GKLeaderboardViewController zamiast: – Felix

0

Spróbuj użyć tego kodu:

-(void)showGameCentersDefaultPage { 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
      gameCenterController.gameCenterDelegate = self; 
      gameCenterController.viewState = GKGameCenterViewControllerStateDefault; 
      [self presentViewController:gameCenterController animated:YES completion:nil]; 
     } 
} 

Jeśli chcesz zacząć od konkretnego typu GameCenter Liderów można wywołać następującą metodę z listy leaderboardID

- (void)showLeaderboard:(NSString*)leaderboardID { 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     //The next three lines are the lines of interest... 
     gameCenterController.viewState = GKGameCenterViewControllerStateDefault; 
     gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday; 
     gameCenterController.leaderboardCategory = leaderboardID; 
     [self presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 
+0

Wypróbowałem to wszystko, ale nadal ląduję na ekranie Wyzwania. Sądzę, że jest to jeden, muszę zaakceptować, nie rozumiem, dlaczego mam kod, który działa (stary). – PeterK

0

Zastosowanie GKGameCenterViewController i ustawić stan widoku:

//Create a leaderboard view controller 
GKGameCenterViewController *leaderboardViewController = [[GKLeaderboardViewController alloc] init]; 
leaderboardViewController.viewState = GKGameCenterViewControllerStateLeaderboards; 

//Set the time scope (ex. All Time, This Week, Today) and the leaderboard ID 
leaderboardViewController.timeScope = GKLeaderboardTimeScopeAllTime; 
leaderboardViewController.leaderboardCategory = leaderboardID; 

//Set the delegate so we can handle various actions including dismissal 
leaderboardViewController.leaderboardDelegate = self; 

//Present the view controller 
[self presentViewController:leaderboardViewController animated:YES completion:nil]; 

Ten kod wyświetli kontroler widoku, który wyświetli wszystkie tablice wyników gier (lub rankingi, jeśli jest tylko jeden). Możesz także ustawić właściwości, takie jak wyświetlana tabela wyników, zakres czasowy, delegowanie itp. Pamiętaj również, że możesz zrobić coś podobnego z osiągnięciami, korzystając z GKAchievementViewController.

Kod, który podałeś w swoim pytaniu,

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]]; 

Uruchamia aplikację GameCenter. Oznacza to, że iOS będzie wyjdzie z aplikacji i przełączy się na GameCenter. Może to być mylące dla użytkownika. Powinieneś także unikać zmuszania użytkownika do opuszczania aplikacji. Zamiast tego skorzystaj z GKViewControllers, które są prezentowane modalnie w aplikacji.

+0

'GKLeaderboardViewController' został zamortyzowany od iOS 7.0. – Zorayr

+0

@Zorayr Czy dlatego zaszedłeś na dół? Jest to oczywiście nieaktualna odpowiedź, więc to nie jest ważny powód - przynajmniej daj mi szansę na edycję! –

+0

Jeśli jest nieaktualny, usuń odpowiedź. Ludzie marnują czas na próbę amortyzacji. – Zorayr

0

Dla iOS 7.0, używam następujące:

reklamowej Liderów:

- (void)displayLeaderboard:(UIViewController *)viewController 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
     [viewController presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 

Pokaż Osiągnięcia:

- (void)displayAchievements:(UIViewController *)viewController 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateAchievements; 
     [viewController presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 

Uwaga że kontroler widok próbuje z nich korzystać funkcje będą musiały przejść (tzn. viewContr oller parametr musi być ustawiony na jakiś aktywny kontroler widoku).

Mam nadzieję, że to pomoże.

Powiązane problemy