使用官方提供的GameController模块,监听接入的硬件外设(游戏手柄、键盘、鼠标),并处理传入的数据。
Pod导入:
pod 'ExternalDeviceManager', '~> 0.0.1'
接口使用的单例对象ExternalDeviceManager
,所有的数据都能从该接口获取到。
一键开启所有外设事件监听。
/// 开启对所有外设设备的监听
ExternalDeviceManager.shared.startAllDeviceObservers()
也可以每种设备按照需要去单独开启监听。
/// 监听手柄外设
ExternalDeviceManager.shared.startGamePadObservers()
/// 监听键盘外设
ExternalDeviceManager.shared.startKeyboardObservers()
/// 监听鼠标外设
ExternalDeviceManager.shared.startMouseDeviceObservers()
/// 监听手柄的连接和断开事件
NotificationCenter.default.addObserver(self, selector: #selector(handleGamepadConnected), name: .gamePadConnected, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleGamepadDisconnected), name: .gamePadDisConnected, object: nil)
鼠标、键盘也有类似的事件,可在KeyboardMacros.swift
和MouseDeviceMacros.swift
中查阅。
/// 接收手柄数据回调
ExternalDeviceManager.shared.gamepadButtonCallBack = { [weak self] gamepad, button, data in
// gamepad: 可以拿到手柄的相关信息
// button: 表示手柄上具体哪个按键
switch data {
case .button(let pressed):
// 按键按下和抬起
case .dimension(let point):
// 二维数据的按键
case .intensity(let intensity):
// 带有力度的按键
}
}
/// 键盘上按键事件回调
ExternalDeviceManager.shared.keyBoardCallBack = { [weak self] button, pressed in
// button: 对应键盘上的按键
// pressed: 按键按下和抬起的状态
}
/// 鼠标上按钮事件回调
ExternalDeviceManager.shared.mouseButtonCallBack = { [weak self] mouse, button, pressed in
// mouse: 当前的鼠标对象
// button: 对应键盘上的按键
// pressed: 按键按下和抬起的状态
}
/// 鼠标移动事件回调
ExternalDeviceManager.shared.mouseMoveCallBack = { [weak self] mouse, offset in
// mouse: 当前的鼠标对象
// offset: 偏移量
}
/// 鼠标中间滚轮回调
ExternalDeviceManager.shared.mouseScrollCallBack = { [weak self] mouse, offset in
// mouse: 当前的鼠标对象
// offset: 偏移量
}