gpt4 book ai didi

raspberry-pi - 为什么 Gamepad.GetCurrentReading() 不起作用?

转载 作者:行者123 更新时间:2023-12-04 04:22:57 26 4
gpt4 key购买 nike

我创建了一个 UWP 应用程序,它利用了 Windows.Gaming.Input命名空间,但是当我部署到运行 Windows 10 IoT Core 的 Raspberry Pi 2 B 时,Gamepad.GetCurrentReading()方法返回 GamepadReading 的默认实例. (即一切都是 0 )

在我的本地机器上调试似乎有效。要让这个 API 在我的设备上工作,还需要什么额外的东西吗?

附言我注意到其中一个样本 uses HidDevice ,所以我会同时研究它作为替代方案。

最佳答案

这是我的(不完整的)解决方法。它是 Gamepad 的替代品类(class)。

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
};
}
}

关于raspberry-pi - 为什么 Gamepad.GetCurrentReading() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com