繁体   English   中英

如何快速连接到外部游戏控制器-Apple TV

[英]How do I connect to a external game controller in swift - apple tv

我在这里遵循了本教程: https : //cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/将外部游戏控制器连接到Sprite Kit中的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
    }
}

调试时,我发现GCController.controllers()数组为空,即使它已连接到Apple TV。 更加确定的是,我什至在应用商店中的一个应用上测试了控制器,效果很好。 有人可以帮忙吗?

编辑:这是我的didMove函数:

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

setUpControllerObservers函数何时以及从哪个类调用? 我们需要更多背景信息来帮助您。

无论如何,请确保至少自己一次手动调用connectControllers函数。 您不能仅仅依靠传入的通知来为您调用该函数。 他们在您链接的教程中提到了这一点:

还要注意, 我们在setUpControllerObservers之后立即调用connectControllers。 该应用程序首次运行时,setUpControllerObservers会导致我们的NSNotification也调用connectControllers,但是如果我们要在GameScene和其他类之间来回切换,则不能依靠connectControllers从通知中再次调用。 这就是为什么我们自己称呼它。

您还应该确保在应用程序完成启动之前(例如,在AppDelegate早期)不要调用这些函数:

调用controllers类方法以检索所有已连接控制器的GCController对象数组。 [...]如果没有连接的控制器,或者在应用启动时调用此方法,则数组将为空


编辑:

为了调试,您是否可以尝试使用startWirelessControllerDiscovery(completionHandler:)函数“发现”控制器? (在《 游戏控制器编程指南 :发现无线控制器》中进行了描述)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM