如何在Linux中从Mono/ c#访问操纵杆/手柄

本文关键字:访问 操纵杆 手柄 Mono Linux 中从 | 更新日期: 2023-09-27 18:04:51

我正在用c#在运行Debian的树莓派上做一个机器人项目。我已经得到了PS3 DualShock控制器与操作系统配对,因此它显示为操纵杆设备/dev/input/jso。

现在我想从c#代码访问DualShock操纵杆和按钮。这似乎比我预期的要困难(或者至少更模糊)——我发现了OpenTK的参考资料,它看起来至少处于昏迷状态,如果不是死亡的话;和XNA,它可能做到这一点,但包含的东西比我需要的要多(我担心在我的RPi上让所有这些都工作),以及其他各种不太受支持的小包装器项目。

作为Mono, c#和Linux的新手,我在这里有点不知所措……关于在这种环境中读取DualShock状态的最简单/最好的方法有什么建议吗?

如何在Linux中从Mono/ c#访问操纵杆/手柄

Monogame是XNA的开源实现。它是跨平台的,并且针对Linux。你可以看看框架的输入源代码,看看他们是怎么做的。

单手柄事件通常是轮询的。下面是一个非常基本的代码,演示检查按钮" a "地位。

GamePadState gamePadState;
gamePadState = GamePad.GetState((PlayerIndex)0); //Palyer indices are from 0-3, basically indicate the gamepad index
if (gamePadState.Buttons.A == ButtonState.Pressed)
{
    //take action for button "A"
} 

在访问按钮/触发器/拇指杆状态值之前,检查手柄连接状态总是一个好主意。

if (gamePadState.IsConnected)
{
    //check for button/trigger/thumbstick status
}

你应该看看directinput,但那是针对windows的,然而现在有一个库将它包装到c#中。它叫slimDX,也许你可以让它工作