获得操纵杆的输入
操纵杆设备是一种奇怪的(odd duck)接口。因为一个操纵杆或者游戏控制器可以安装在玩家系统中一个或者多个操纵杆端口,并且可以任意组合(could be any of the vast array of such items available),所以使用操纵杆会更加复杂。在我们创建和配置操纵杆设备,先得发现可用的操纵杆和我们需要使用哪些。我们用来创建键盘和鼠标设备的类InputObject也有一个枚举系统里配置的所有操纵杆的方法。枚举操纵杆的代码如列表2-1。
列表2.1:枚举操纵杆
// Enumerate joysticks in the system.
foreach(DeviceInstance instance in Manager.GetDevices(DeviceClass.GameControl,
EnumDevicesFlags.AttachedOnly))
{
// Create the device. Just pick the first one.
JoystickDev = new Device( instance.InstanceGuid );
break;
}
注解:注意到我们选择了第一个找到的操纵杆。另一个选择是提供找到的操纵杆列表给用户,供用户选择或者比较操纵杆的功能以便找到最适合的。
协作级别和数据格式类似鼠标那样指定:
JoystickDev.SetCooperativeLevel(winHandle, CooperativeLevelFlags.Exclusive |
CooperativeLevelFlags.Foreground);
JoystickDev.SetDataFormat(DeviceDataFormat.Joystick);
操纵杆有两种可用的数据格式。第一种(Joystick)是较简单的。在这里简单是相对的。这个数据结构包含3个轴,两个轴的旋转值,两个游标(slider),四个视点(POV)输入和32个按钮!POV输入通常受限(wired)于操纵杆顶端的四个方向控制(The POV inputs are normally wired to a four-direction control on the top of a joystick)。可以应用于改变摄像机方向和选择武器。第二种格式连接有力反馈设备和速度,加速度,以及每个轴的力度。不用说,在我们的示例里仅应用第一种结构。
变量m_joystick是JoystickState结构的一个实例,与Joystick结构关联。你将看到我们捕获POV输入的实际个数为了将来的引用,这个已经超出设备的能力。
从这里起,操纵杆设备就像其他的两个设备一样工作。Acquire, poll和unacquire设备。使用下面的代码访问操纵杆状态信息:
m_joystick = JoystickDev.CurrentJoystickState;
不像鼠标数据,操纵杆轴数据是绝对的值,而不是相对于最后一次poll的值。
本文介绍如何在系统中枚举并配置操纵杆设备,探讨操纵杆数据格式及其在游戏开发中的应用,包括如何获取操纵杆的状态信息。
385

被折叠的 条评论
为什么被折叠?



