2017-06-12 103 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 
    } 


     //… 
    }