如何从XBox 360控制器获取输入?

时间:2009-03-31 01:55:05

标签: input xna directx xbox360

我正在编写一个需要从XBox 360控制器获取输入的程序。输入将以无线方式发送到我正在建造的RC直升机上。

到目前为止,我已经了解到这可以使用DirectX的XInput库或XNA中的Input框架来完成。

我想知道是否还有其他选择。我的程序范围相当小,不得不安装像DirectX或XNA这样的大型游戏库。此外,我希望该程序是跨平台的,而不是微软特定的。

是否有一种简单的轻量级方法,我可以用Python之类的东西来获取控制器输入?

编辑以回答一些评论:

直升机总共有6个螺旋桨,以3个同轴对排列。基本上,它与this非常相似,只需要花费大约1,000美元而不是15,000美元。它将使用Arduino进行板载处理,使用Zigbee进行无线控制。

选择360控制器是因为它设计得很好。它非常符合人体工程学,并且具有所需的所有控制输入。对于熟悉直升机控制的人来说,左操纵杆将控制集体,右控制杆控制俯仰和滚转,模拟触发器将控制偏航。模拟触发器是360控制器的一大特色。 PS和其他大多数人都没有。

我有一个项目的网页,但它仍然很稀疏。我确实计划记录整个设计,所以最终它会很有趣。
http://tricopter.googlecode.com
另一方面,谷歌有没有为googlecode项目提供博客功能?

我希望360控制器输入程序尽可能在Linux和Windows上运行。最后,我想将控制器直接连接到嵌入式微控制器板(例如Arduino),这样我就不必通过计算机,但目前它并不是一个高优先级。

4 个答案:

答案 0 :(得分:9)

并不是那么困难。正如前面提到的那样,你可以使用SDL库来读取xbox控制器的状态,然后你可以用它做任何你喜欢的事情。

有一个SDL教程:http://sdl.beuc.net/sdl.wiki/Handling_Joysticks非常有用。

请注意,Xbox控制器具有以下内容:

  • 两个操纵杆:
    • 左操纵杆是轴0& 1;
    • 左触发器是轴2;
    • 右操纵杆是轴3& 4;
    • 右触发器是轴5
  • 一顶帽子(D-pad)
  • 11个SDL按钮
    • 其中两个是操纵杆中心按
  • 两个触发器(充当轴,见上文)

即将推出的SDL v1.3也将支持力反馈(又称触觉)。

我认为,由于这个帖子已经有好几年了,你已经做了一些事情,所以这篇文章主要是为了给未来的访问者提供信息。

答案 1 :(得分:7)

PyGame可以读取操纵杆,这是X360控制器在PC上显示的。

答案 2 :(得分:1)

好吧,如果你真的不想在DirectX上添加依赖项,你可以使用旧的Windows操纵杆API - Windows多媒体 - >平台SDK中的操纵杆参考。

标准的免费跨平台游戏库是Simple DirectMedia Layer,最初编写为将Windows游戏移植到Unix(Linux)系统。它是一个非常基本的轻量级API,往往支持每个系统上最小的功能子集,并且它具有大多数主要语言的绑定。它具有非常基本的操纵杆和游戏手柄支持(例如没有力反馈),但它可能足以满足您的需求。

答案 3 :(得分:0)

也许Mono.Xna库增加了GamePad支持,这将提供您正在寻找的跨平台功能:
 http://code.google.com/p/monoxna/

对于图书馆过于沉重的担忧,当然,对于这个选项,这可能是真的......但是,它可能为将来开展一些不错的可视化提供机会。

免责声明:我不熟悉mono xna项目的状态,因此可能还没有添加此功能。但仍然是'这是一个选择: - )