2017-05-30 4 views
6

このチュートリアルはhttps://cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/に接続して、外部ゲームコントローラをスプライトキットのapple tvに接続しましたが、チュートリアルコードではできませんでした。エラーメッセージは表示されませんでしたが、単純に機能していませんでした。ここに私のコードは次のとおりです。swift - appleのテレビで外部ゲームコントローラに接続するには

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 
    } 
} 

デバッグするとき、私はそれがApple TVに接続していたにもかかわらず、GCController.controllers()配列が空であることが判明しました。確かに、私は正常に動作したアプリストアのアプリでコントローラをテストしました。誰でも助けてくれますか?

編集:ここは私didMove機能である:

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

答えて

3

とき、あなたsetUpControllerObservers関数が呼び出されたクラスから?私たちはあなたを助けるためにいくつかの文脈が必要です。

とにかく、手動でconnectControllers関数を少なくとも1回は手動で呼び出すようにしてください。その機能を呼び出すために着信通知だけに依存することはできません。彼らはあなたがリンクされているチュートリアルでこれを言及:

お知らせすぎて、は、我々は右 setUpControllerObservers後connectControllersに自分自身を呼び出しています。初めてアプリを実行、 setUpControllerObserversは、私たちのNSNotificationも connectControllersを呼び出すことになりますが、私たちは私たちの GameSceneと他のクラスの間を行き来していたならば、我々は から再び呼び出さ取得connectControllersに頼ることはできませんお知らせ。だから私たちはそれを私たち自身と呼んでいます。 CartoonSmart

であなたのリンクのチュートリアルから

  • アプリが起動完了する前に、また、あなたはこれらの関数を呼び出していないことを確認すべきである(例えば、早期AppDelegate中):

    コントローラのクラスメソッドを呼び出して、接続されているすべてのコントローラのGCControllerオブジェクトの配列 を取得します。 [...] コントローラーが接続されていないか、 の起動中にこのメソッドを呼び出すと、配列は空のになります。


    から編集:デバッグ目的のために

    、あなたはstartWirelessControllerDiscovery(completionHandler:)機能を使用してコントローラを '発見' してみてくださいだろうか? (Game Controller Programming Guideで説明:発見ワイヤレスコントローラ)私は私の質問を編集し

+0

、それはdidMove関数から呼ばれていた、と機能を表示するには、私のdidmoveは今 – Rishi

+0

おかげ質問に与えられています。コントローラーを「発見」しようと思いますか?上記の編集を参照してください。 – Kymer

関連する問題