第二章 第四节 获得操纵杆的输入

本文介绍如何在系统中枚举并配置操纵杆设备,探讨操纵杆数据格式及其在游戏开发中的应用,包括如何获取操纵杆的状态信息。

获得操纵杆的输入

操纵杆设备是一种奇怪的(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_joystickJoystickState结构的一个实例,与Joystick结构关联。你将看到我们捕获POV输入的实际个数为了将来的引用,这个已经超出设备的能力。

 

从这里起,操纵杆设备就像其他的两个设备一样工作。Acquire, pollunacquire设备。使用下面的代码访问操纵杆状态信息:

m_joystick = JoystickDev.CurrentJoystickState;

不像鼠标数据,操纵杆轴数据是绝对的值,而不是相对于最后一次poll的值。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值