2015-07-18 2 views
1

Я использую GKTurnbasedMatchMakerViewController, чтобы начать новую игру с разворотом или проверить существующие, и это работает отлично. Однако я застрял в этом сценарии: Предположим, что pleayer открывает приложение gamecenter в своем мобильном устройстве и видит, что там есть действующий подиум. Он нажимает на матч и нажимает кнопку поворота/поворота на кнопку (в зависимости от того, в чей ход он сейчас), который приводит его в мое приложение. Теперь то, что я хочу, это данные сопоставления, как мы получаем от GKTurnbasedMatchMakerViewController на делегате didFindMatch, чтобы я мог показать ему соответствующий пользовательский интерфейс.Как получить matchdata matchbased, входя в игру через приложение gamecenter?

В настоящее время после прочтения много я нашел GKLocalPlayerListner может быть то, что я ищу. Итак, вот что я сделал.

Добавлен GKLocalPlayerListner в расширениях моего класса.

Зарегистрированный слушатель для локального игрока во время аутентификации пользователя.

func authenticateLocalUser() { 

     println("Authenticating local user...") 
     if GKLocalPlayer.localPlayer().authenticated == false { 
      GKLocalPlayer.localPlayer().authenticateHandler = { (view, error) in 
       if error == nil { 
        println("authentication") 
        self.authenticated = true 
        GKLocalPlayer.localPlayer().registerListener(self) 
       } else { 
        println("\(error.localizedDescription)") 
       } 
      } 
     } else { 
      println("Already authenticated") 
//   GKLocalPlayer.localPlayer().registerListener(self) 
     } 
    } 

Добавлены методы делегата GKLocalPlayerListener в моем классе.

// MARK: GKLocalPlayerListener 

func player(player: GKPlayer!, didAcceptInvite inviteToAccept: GKInvite!) { 
    println("turnbased: didAcceptInvite") 
    let mmvc = GKMatchmakerViewController(invite: inviteToAccept) 
    mmvc.matchmakerDelegate = self 
    presentingViewController.presentViewController(mmvc, animated: true, completion: nil) 
} 

func player(player: GKPlayer!, didRequestMatchWithOtherPlayers playersToInvite: [AnyObject]!) { 
    println("turnbased: didRequestMatchWithOtherPlayers") 
} 
func player(player: GKPlayer!, receivedTurnEventForMatch match: GKTurnBasedMatch!, didBecomeActive: Bool) { 
    println("turnbased: received turnbased match with didBecomeActive = \(didBecomeActive) and match = \(match.description)") 
} 

func player(player: GKPlayer!, didReceiveChallenge challenge: GKChallenge!) { 
    println("turnbased: Challenge received") 
} 

Но я не могу получить ни одного из них при входе в игру из приложения gamecenter.

Так что, в первую очередь, GKLocalPlayerListener даже делает то, что я пытаюсь достичь? Если это не возможно в iOS для достижения того, чего я хочу? Пожалуйста, помогите мне в этом.

ответ

1

Я так и не нашел, как на IOS8.4. ReceivedTurnEvent срабатывает только при возникновении события. При запуске приложения из gameCenter не создается событие. Я просмотрел параметры, проходящие через аргументы, и установил в переменных среды, и еще не нашел никакого удара относительно того, какой матч был выбран в приложении gameCenter.

Похожие: Handle Selected Turns/Games in iOS Game Center App in Game Center Enabled App

0

компании Apple выбрала

удалить эту характеристику

Доказательства из отчета об ошибке Apple, что я представил.

Apple bug report