我创建了一个利用Windows.Gaming.Input
命名空间的UWP应用,但是当我部署到运行Windows 10 IoT Core的Raspberry Pi 2 B时,Gamepad.GetCurrentReading()
方法返回默认值GamepadReading
的实例。 (即一切都是0
)
在我的本地计算机上进行调试似乎有效。是否需要其他任何方法才能在我的设备上运行此API?
P.S。我注意到其中一个样本uses HidDevice,所以我会在同一时间内将其作为替代方案。
答案 0 :(得分:1)
这是我的(不完整的)解决方法。它是Gamepad
类的替代品。
class HidGamepad
{
static readonly List<HidGamepad> _gamepads = new List<HidGamepad>();
GamepadReading _currentReading;
static HidGamepad()
{
var deviceSelector = HidDevice.GetDeviceSelector(0x01, 0x05);
var watcher = DeviceInformation.CreateWatcher(deviceSelector);
watcher.Added += HandleAdded;
watcher.Start();
}
private HidGamepad(HidDevice device)
{
device.InputReportReceived += HandleInputReportRecieved;
}
public static event EventHandler<HidGamepad> GamepadAdded;
public static IReadOnlyList<HidGamepad> Gamepads
=> _gamepads;
public GamepadReading GetCurrentReading()
=> _currentReading;
static async void HandleAdded(DeviceWatcher sender, DeviceInformation args)
{
var hidDevice = await HidDevice.FromIdAsync(args.Id, FileAccessMode.Read);
if (hidDevice == null) return;
var gamepad = new HidGamepad(hidDevice);
_gamepads.Add(gamepad);
GamepadAdded?.Invoke(null, gamepad);
}
void HandleInputReportRecieved(
HidDevice sender, HidInputReportReceivedEventArgs args)
{
var leftThumbstickX = args.Report.GetNumericControl(0x01, 0x30).Value;
var leftThumbstickY = args.Report.GetNumericControl(0x01, 0x31).Value;
_currentReading = new GamepadReading
{
LeftThumbstickX = (leftThumbstickX - 32768) / 32768.0,
LeftThumbstickY = (leftThumbstickY - 32768) / -32768.0
};
}
}