前言
这是我的第一篇技术博客,希望能为大家提供些有用信息。
概述
前段时间有一项工作是通过游戏手柄控制云台,通过google和msdn搞定了,在这吧就总结一下吧。
问题
对于手柄控制主要有以下几个问题
- 在合适的时机获取游戏手柄的输入?
- 一般游戏手柄都是有n个方向键和n个功能键控制的,要确认各个键的状态?
解决方案
- 通过windows API 中与游戏手柄相关的函数进行控制,主要是joystick系统函数,这一问题的关键点是P/Invoke调用。优点是不需要directx 支持,缺点是调用如果要想让多个窗口接受手柄输入有点麻烦(后边会详细描述)。
- 通过directx的directx input,Microsoft.DirectX.DirectInput命名空间下的类对joystick进行了很好的封装,在.net中用时很方便。优点使用方便,缺点需要directx支持不过这点应该不用担心,现在大部分系统安装完后应该都安装了directx
在本篇中将先介绍通过directxinput进行控制,这篇文章有些地方借鉴了codepoject上的文章点击这里可以看到
程序最终运行效果
1.获取系统中已经连接成功的游戏手柄列表,代码如下
public static string[] FindJoysticks(IntPtr hWnd)
{
string[] systemJoysticks = null;
try
{
// 查找连接成功的游戏设备
DeviceList gameControllerList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
// 遍历列表并获取设备名称
if (gameControllerList.Count > 0)
{
systemJoysticks = new string[gameControllerList.Count];
int i