2017-05-30 10 views
6

Mam śledzić ten tutorial tutaj: https://cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/ podłączyć zewnętrzny kontroler gier do Apple TV w zestawie sprite, ale nie byłem w stanie zrobić to z kodem tutoriale . Nie otrzymałem komunikatu o błędzie, ale po prostu nie działał. Tu jest mój kodu:Jak podłączyć się do zewnętrznego kontrolera gier w szybkim - Apple TV

func setUpControllerObservers() { 
    NotificationCenter.default.addObserver(self, selector: #selector(connectControllers), name: NSNotification.Name.GCControllerDidConnect, object: nil) 
    NotificationCenter.default.addObserver(self, selector: #selector(disconnectController), name: NSNotification.Name.GCControllerDidDisconnect, object: nil) 
} 

func connectControllers() { 
    var count = 0 
    for controller in GCController.controllers() { 
     count = count + 1 
     print(count) 
     print(controller.extendedGamepad != nil) 
     print(controller.microGamepad != nil) 
     print(controller.gamepad != nil) 
     if (controller.extendedGamepad != nil && controller.playerIndex == .indexUnset) { 
      if (count == 1) { 
       controller.playerIndex = .index1 
      } 
      else if (count == 2) { 
       controller.playerIndex = .index2 
      } 
      else if (count == 3) { 
       controller.playerIndex = .index3 
      } 
      else if (count == 4) { 
       controller.playerIndex = .index4 
      } 
      controller.extendedGamepad?.valueChangedHandler = nil 
      setupExtendedController(controller: controller) 
     } 
    } 
} 

func disconnectController() { 

} 

func setupExtendedController(controller: GCController) { 
    controller.extendedGamepad?.valueChangedHandler = { (gamepad: GCExtendedGamepad, element: GCControllerElement) in 
     // not calling 
    } 
} 

Gdy debugowanie znalazłem tablica GCController.controllers() być pusta, mimo że był podłączony do Apple TV. Aby być bardzo pewnym, przetestowałem nawet kontroler na aplikacji ze sklepu z aplikacjami, która działała dobrze. Czy ktoś może pomóc?

Edit: tutaj jest moja funkcja didMove:

didMove(to view: SKView) { 
    setUpControllerObservers() 
    connectControllers() 
} 

Odpowiedz

3

Kiedy iz jakiej klasy jest czynność setUpControllerObservers nazywa? Potrzebujemy trochę więcej kontekstu, aby ci pomóc.

W każdym razie, upewnij się, że ręcznie zadzwoniłeś do swojej funkcji connectControllers przynajmniej raz. Nie możesz polegać wyłącznie na powiadomieniu przychodzącym, aby wywołać tę funkcję za Ciebie. Oni o tym wspomnieć w tutorialu masz połączonej:

Wskazówka też wzywamy connectControllers się tuż po setUpControllerObservers. Po raz pierwszy aplikacja działa, setUpControllerObservers spowoduje naszą NSNotification również zadzwonić connectControllers, ale gdybyśmy tam iz powrotem pomiędzy naszym GameScene i drugiej klasy, nie możemy polegać na connectControllers coraz zwanych ponownie z powiadomienie. Dlatego nazywamy to sobą.

Należy również upewnić się, że nie nazywają te funkcje zanim aplikacja zakończyła uruchomienie (np wcześnie AppDelegate):

Wywołanie metody klasy kontrolerów w celu pobrania tablicy obiektów GCController dla wszystkich podłączonych kontrolerów. [...] Jeśli nie ma żadnych podłączonych kontrolerów lub ty wywołaj tę metodę, podczas gdy twoja aplikacja uruchomi się , tablica będzie pusta.


Edit:

Dla celów debugowania, można spróbować 'odkrywanie' kontrolera za pomocą funkcji startWirelessControllerDiscovery(completionHandler:)? (opisane w Game Controller Programming Guide: Wykrywanie kontrolerów bezprzewodowych)

+0

Edytowałem moje pytanie, Zostało wywołane z funkcji didMove, a moja didmove do widoku funkcji jest podana w pytaniu teraz – Rishi

+0

Dzięki.Czy możesz spróbować "odkryć" kontrolera? Zobacz edycję powyżej. – Kymer

Powiązane problemy