【问题标题】:Game controller layout detection - swift游戏控制器布局检测 - swift
【发布时间】:2017-06-12 12:45:59
【问题描述】:

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

任何帮助将不胜感激

【问题讨论】:

    标签: swift apple-tv gamecontroller


    【解决方案1】:

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

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

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

    在苹果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
        }
    
    
          //…
      }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 2011-06-23
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多