|
假如需要使用USB摇杆(几乎所有的游戏外设)通过电脑来进行小车、机器人或4轴的控制的话。本文的内容或许有帮助,稍加修改即可整合。
(原文件名:T1dYxEXdFFXXbsigo8_100510_jpg_310x310.jpg)
主要是使用托管的DirectX库。Microsoft.Directx.DirectInput [这个库貌似只有32位的。不清楚XNA有没有64位对应的]
核心代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using Microsoft.DirectX.DirectInput;
namespace USBJoystick
{
public class USBJoyStick : IDisposable, INotifyPropertyChanged
{
private Device joyStick = null;
private Task joyTask = null;
public USBJoyStick()
{
try
{
DeviceList joyList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
joyList.MoveNext();
joyStick = new Device(((DeviceInstance)joyList.Current).InstanceGuid);
joyStick.Acquire();
JoystickState = new JoyState();
}
catch
{
throw new Exception("USB摇杆初始化失败");
}
}
public void Start()
{
joyTask = new Task(() =>
{
while (true)
{
joyStick.Poll();
var state = joyStick.CurrentJoystickState;
JoystickState.X = state.X >> 8;
JoystickState.Y = state.Y >> 8;
JoystickState.A = state.GetSlider()[0] >> 8;
OnPropertyChanged("JoystickState");
Thread.Sleep(10);
}
});
joyTask.Start();
}
public void Dispose()
{
if (joyStick != null)
joyStick.Dispose();
}
public JoyState JoystickState { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string Name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(Name));
}
}
public class JoyState
{
public int X { get; set; }
public int Y { get; set; }
public int A { get; set; }
public double aX
{
get
{
if (X > 128)
{
return -(double)(X - 128) / 128.0 * 45;
}
if (X < 127)
{
return (double)(127 - X) / 128.0 * 45;
}
return 0;
}
}
public double aY
{
get
{
if (Y > 128)
{
return (double)(Y - 128) / 128.0 * 45;
}
if (Y < 127)
{
return -(double)(127 - Y) / 128.0 * 45;
}
return 0;
}
}
}
}
完整项目文件:
点击此处下载 ourdev_641865CM2TT0.zip(文件大小:979K) (原文件名:WpfApplication1.zip)
运行截图:
(原文件名:??±ê??.png)
运行视频:
点击此处下载 ourdev_641872Z4O1GG.zip(文件大小:3.51M) (原文件名:20110521041.zip) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|