如何连接到苹果电视中的外部游戏控制器



>我在这里遵循了本教程:https://cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/将外部游戏控制器连接到精灵套件中的 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()数组是空的,即使它连接到苹果电视。为了特别确定,我什至在应用程序商店的应用程序上测试了控制器,效果很好。谁能帮忙?

编辑:这是我的 didMove 函数:

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

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

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

还要注意,我们自己调用连接控制器之后 setUpControllerObservers.应用首次运行时, setUpControllerObservers将导致我们的NSNotization也调用 连接控制器,但是如果我们要在 GameScene 和其他类,我们不能依赖 connectControllers 获取 从通知再次调用。这就是为什么我们自己称呼它。

  • 来自您在卡通智能上的链接教程

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

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

  • 摘自 Apple 的游戏控制器编程指南(查找连接的控制器)

编辑:

出于调试目的,您可以尝试使用startWirelessControllerDiscovery(completionHandler:)函数"发现"控制器吗?(如游戏控制器编程指南:发现无线控制器中所述)

相关内容

  • 没有找到相关文章

最新更新