2017-06-12 89 views
1

如何检测苹果电视的游戏控制器布局?如果控制器的布局不同,我想更改控件,这将使游戏更容易玩。 。例如,苹果推荐的Nimbus Controller就像一个带有两个游戏杆的游戏站控制器,但我看起来似乎还有其他类型的控制器,它们有一个xbox设计,底部有一个d-pad和一个操纵杆,如果我能发现哪个是哪个,改变为不同的控制器控制,就会使游戏更容易发挥游戏控制器布局检测 - swift

任何帮助,将不胜感激

回答

0

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

2

你应该使用控制器的配置文件来实质控制,以游戏的输入映射。

控制器被自动发现,一个物理控制器由一个GCController对象来代表,这个对象控制着诸如GCGamepad,extendedGamepad等控制器的控制。你应该检查哪些控制被注册到了每个控制器上。从文档上Discovering And Connecting Controllers

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

在它们用于.GCControllerDidConnect通知注册苹果sample code并浇铸该通知对象作为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 
    } 


     //… 
    }