游戏控制器布局检测 - swift
Game controller layout detection - swift
我如何检测 apple tv 的游戏控制器布局?如果控制器的布局不同,我想更改控件,这将使游戏更容易玩。 .例如,苹果推荐的 Nimbus Controller 形状像一个游戏站控制器,底部有两个操纵杆,但我似乎有其他类型的控制器,其设计类似于 xbox,底部有一个 d-pad 和一个操纵杆,如果我能检测出哪个是哪个,换成不同控制器的控制,这将使游戏更容易玩
如有任何帮助,我们将不胜感激
您应该使用控制器配置文件将物理控件映射到游戏输入。
控制器是自动发现的,物理控制器由 GCController 对象表示,该对象“配置文件”控制器控件,例如 GCGamepad、extendedGamepad 等。您应该检查每个控制器注册了哪些控件。来自 Discovering And Connecting Controllers 的文档:
“After your app has finished launching, the operating system
automatically creates a list of connected controllers. Call
the controllers class method to retrieve an array
of GCController objects for all connected controllers.”
在苹果中 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
}
//…
}
我最后只是简单地询问用户他们的游戏控制器布局。 Ercell0 的回答是连接和使用游戏控制器的好方法,但并没有真正回答我的问题。
我如何检测 apple tv 的游戏控制器布局?如果控制器的布局不同,我想更改控件,这将使游戏更容易玩。 .例如,苹果推荐的 Nimbus Controller 形状像一个游戏站控制器,底部有两个操纵杆,但我似乎有其他类型的控制器,其设计类似于 xbox,底部有一个 d-pad 和一个操纵杆,如果我能检测出哪个是哪个,换成不同控制器的控制,这将使游戏更容易玩
如有任何帮助,我们将不胜感激
您应该使用控制器配置文件将物理控件映射到游戏输入。
控制器是自动发现的,物理控制器由 GCController 对象表示,该对象“配置文件”控制器控件,例如 GCGamepad、extendedGamepad 等。您应该检查每个控制器注册了哪些控件。来自 Discovering And Connecting Controllers 的文档:
“After your app has finished launching, the operating system automatically creates a list of connected controllers. Call the controllers class method to retrieve an array of GCController objects for all connected controllers.”
在苹果中 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
}
//…
}
我最后只是简单地询问用户他们的游戏控制器布局。 Ercell0 的回答是连接和使用游戏控制器的好方法,但并没有真正回答我的问题。