How to connect to an external game controller in a fast Apple TV

I followed this tutorial here: https://cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/ for connecting an external game controller to the apple TV in the sprite kit, but I could not do it using the tutorial code. I did not receive the error message, but it just did not work. Here is my code:

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

When debugging, I found that the array is GCController.controllers()empty, even if it is connected to an Apple TV. To be sure, I even checked the controller on the application from the application store, which worked fine. Can anyone help?

Edit: here is my didMove function:

didMove(to view: SKView) {
    setUpControllerObservers()
    connectControllers()
}
+6
1

setUpControllerObservers? - , .

, , connectControllers . . , :

, connectControllers setUpControllerObservers. , setUpControllerObservers NSNotification connectControllers, GameScene , connectControllers, . .

, , (, AppDelegate):

GCController . [...] , , , .

  • Apple ( )

Edit:

"" startWirelessControllerDiscovery(completionHandler:)? ( : )

+3

All Articles