游戏控制器布局检测 - 迅捷

时间:2017-06-12 12:45:59

标签: swift apple-tv gamecontroller

如何从apple TV检测游戏控制器布局?如果控制器的布局不同,我想更改控件,这将使游戏更容易播放。例如,苹果推荐的Nimbus Controller形状像一个播放站控制器,底部有两个操纵杆,但我似乎有其他类型的控制器,它们有一个xbox设计,底部有一个d-pad和一个操纵杆,如果我可以检测哪个是哪个,改为控制不同的控制器,它将使游戏更容易玩

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

您应该使用控制器配置文件将物理控件映射到游戏输入。

自动发现控制器,物理控制器由GCController对象表示,该对象“配置”控制器控件,如GCGamepad,extendedGamepad等。您应该检查每个控制器注册了哪些控件。来自Discovering And Connecting Controllers的文档:

  

“应用程序完成启动后,操作系统   自动创建连接的控制器列表。呼叫   用于检索数组的controllers类方法   所有连接的控制器的GCController对象。“

在apple sample code中,他们注册.GCControllerDidConnect Notifications并将通知对象作为GCController实例转换为设置控件(如果存在)的函数,解析控制器并分配相应的处理程序方法:

NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.handleControllerDidConnectNotification(_:)), name: .GCControllerDidConnect, object: nil)

@objc func handleControllerDidConnectNotification(_ notification: NSNotification) {
    let gameController = notification.object as! GCController
    registerCharacterMovementEvents(gameController)
}


  private func registerCharacterMovementEvents(_ gameController: GCController) {
      //…

    // Gamepad D-pad
    if let gamepad = gameController.gamepad {
        gamepad.dpad.valueChangedHandler = movementHandler
    }

    // Extended gamepad left thumbstick
    if let extendedGamepad = gameController.extendedGamepad {
        extendedGamepad.leftThumbstick.valueChangedHandler = movementHandler
    }


      //…
  }

答案 1 :(得分:0)

我最后只是简单地询问用户他们的游戏控制器布局。 Ercell0的答案是一种很好的连接和使用游戏控制器的方法,但并没有真正回答我的问题。