如何在 Linux 中从 Mono/C# 访问游戏杆/游戏手柄?
Posted
技术标签:
【中文标题】如何在 Linux 中从 Mono/C# 访问游戏杆/游戏手柄?【英文标题】:How to access a joystick/gamepad from Mono/C# in Linux? 【发布时间】:2013-03-20 20:38:39 【问题描述】:我正在运行 Debian 的 Raspberry Pi 上使用 C# 开发一个机器人项目。我得到了一个与操作系统配对的 PS3 DualShock 控制器,因此它显示为操纵杆设备 /dev/input/js0。
现在我想从 C# 代码访问 DualShock 操纵杆和按钮。这似乎比我预期的更难(或至少更模糊)——我发现了对 OpenTK 的引用,它似乎至少处于昏迷状态,如果没有死的话;和 XNA,它可能会这样做,但包含的内容比我需要的要多(我担心所有这些都在我的 RPi 上工作),以及其他各种不太受支持的小型包装器项目。
作为一个同时使用 Mono、C# 和 Linux 的新手,我有点不知所措...关于在这种环境中读取 DualShock 状态的最简单/最佳方法有什么建议吗?
【问题讨论】:
你可以试试我的项目,它使用 GLFW 进行输入处理。我以前从未使用过 GLFW 来处理操纵杆输入,所以我们都可以从中学到一些东西。这是项目(您可以将 glfw 类和本机复制/粘贴到您的代码中):github.com/antonijn/Pencil.Gaming 谢谢,我一直在为其他项目寻找一个好的跨平台 C# 游戏库,但在 MonoGame 方面还没有走得太远。 Pencil.Gaming 看起来很有趣——我会试一试。我还会告诉你如何将它用于我的 Raspberry Pi 机器人项目! 【参考方案1】:Monogame 是 XNA 的开源实现。它是跨平台的,并且确实以 Linux 为目标。你可以看看框架的Input Source Code 看看他们是怎么做的。
【讨论】:
【参考方案2】:单声道游戏手柄事件通常是轮询的。下面是一个非常基本的代码,演示了检查按钮“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
【讨论】:
【参考方案3】:你应该看一下directinput,但那是针对windows的,但是现在有一个将它包装到c#的库。它叫做 slimDX,也许你可以让它工作
【讨论】:
它是 DirectX 的包装器,DirectX 是一种仅限 Windows 的技术;因此,研究在 Linux 上处理输入是没有用的。以上是关于如何在 Linux 中从 Mono/C# 访问游戏杆/游戏手柄?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 中从 XAMPP 访问 Windows Wamp64 www 目录以便于操作系统迁移
Linux Mono C#错误:无法打开程序集'Bovine.csproj':文件不包含有效的CIL图像
在 Linux 中从 Java 或 Python 访问扫描器(或者其他的,如果它有技术动机的话)(但 Windows 会很好)