方向盘原理
方向盘是一种特别为赛车游戏设计的专用游戏控制器。
要简要说明方向盘原理,首先需要说明一下一个概念:控制器的“轴”(AXIS):玩家能在一定的范围内圆滑操作控制器达到类比控制需要,而控制器能将玩家的移动量的位置信息量化以后独立输出一组控制数据的就叫一个“轴”(AXIS)。
一个方向盘大约有1-4个控制轴,通常将他们分别叫X、Y、Z和S轴。细分起来又可将每个轴分为“负半轴”和“正半轴”,用 “X/RX”或“-X/+X”这样的表示方法分别表示。
单轴式方向盘:只有一个控制轴,通常用做方向控制,如 “–X” 表示“方向左”;“+X”表示“方向右”等,而油门和刹车等其他控制仍然用按键实现,这类方向盘通常属于“入门级”产品。
2轴式方向盘:通常X轴用作方向控制,另一个轴由油门和刹车合用,即“-Y”用做油门,“+Y”用作刹车;这一类方向盘的油门和刹车也是类比控制了,但因为油门和刹车共用一个轴,所以油门和刹车并不能同时起作用。
3轴式方向盘:方向、油门、刹车各用一个独立的轴,从而实现了分轴控制,也就是说,刹车和油门能同时起作用了。
4轴式方向盘:在3轴式方向盘的基础上再增加一个轴,用做离合器控制,这一类方向盘通常都属于“发烧级”的了。
实际进行游戏的时候,控制器是这样工作的:玩家操作控制器的某个“轴”,控制器内部的处理芯片将玩家操作的该轴的位置信息量化后输出给电脑的DirectInput,DirectInput 将收到的轴位置信息线性放大到 0-65535 的范围,游戏主程序则直接从 DirectInput获得玩家的操作信息从而实现游戏的操作。
以上过程中,玩家对某一个轴的操作可能是无极的,但控制器内部处理芯片将轴位置信息量化后不可能是无极的,每一个轴都会用一定的数值范围来代表相应的轴位置信息,然后处理芯片会将这个范围划分成若干段(通常为等分)来表示实际的轴位置信息,“将某一个轴的位置信息量化的级数”就是说,在控制器的输出端,能将某一个轴分成多少个过渡的中间状况,也就是该控制器的某一给定轴的精度,控制器的各轴的精度是控制器固有的内在品质,也是衡量控制器性能的重要指标之一。
注意量化范围并不一定就是实际精度,比如 微软Precision Wheel方向盘的 X轴(方向轴),量化范围是 -512←→+512,但它转动方向轴的时候,数值每次并不是以 1为单位跳动,而是每次跳动 5或6.所以,实际它在 -512←→+512这个量化范围内只有 100+100 (左右)个过渡状况,也就是说它的方向轴的实际精度是 100+100左右。而不是 512+512.而它的油门和刹车两个轴的量化范围分别都是 0←→63,并且是以 1为单位跳动的,所以说它的油门和刹车轴的实际精度分别都是 64级。
在实际的游戏控制中,我们可能需要对控制器有一些特殊设置,比如控制器中心位置的校准、呆区(Deadzone)设置、以及某些情况下需要的控制器非线性设置等等。下面就谈谈这些:
方向盘设置
一 方向盘的安装
方向的物理安装以及与电脑的电气连接问题从略,请查阅相关产品说明书。
这里只说一下有关方向盘的驱动的安装问题。目前大部分方向盘都是使用USB接口与电脑实行连接的。当正确连接了方向盘以后,Windows 随即就会找到新设备并自动安装。Windows对目前大多数 USB 接口的方向盘都能提供基本的支持,也就是说,即使不安装方向盘自带的驱动,大部分方向盘也都是可以实现基本功能的,但一些方向盘的特殊功能如果不安装自带的驱动则可能不能正常工作,如某些震动方向盘的震动功能,力回馈功能,以及其他比如微软方向盘的按键编程功能等。正是因为 Windows 会自动识别出方向盘并立即自动安装了驱动,如果这时候再安装方向盘自带的驱动,某些情况可能会出现意外,如外面流传的“微软自己出的方向盘不能与自己的操作系统兼容”这样的问题等。如果你也遇到“安装了方向盘自带的驱动以后方向盘不能正常工作”这一类似的问题,那么你可以试试如下办法:
对于USB接口的方向盘,那么在开机的状况下将方向盘连接到电脑的USB插头“热拔”下来,再重新插上,看看是否解决问题。
如果无效,那么就先卸载方向自带的驱动;然后打开“设备管理器”,刷新(扫描硬件改动)找到你的方向盘设备,卸载它。(这时候别再刷新,否则Windows 又会立即重新找到方向盘并自动安装)。这时候再重新安装方向盘自带的驱动,完成后再打开“设备管理器”,“扫描硬件更新”以便找到你的方向盘,再试试看,可能这时候方向盘就能正常工作了。其实,这个办法的实质是:“先安装方向盘带的驱动,后连接方向盘”,如果你先连接方向盘后装驱动出现问题,不妨试试这个办法。
未安装方向盘自带的驱动而是让Windows自动识别出的方向盘,通常在“控制面板/游戏控制器”里,可以进行方向盘的校准工作,但安装了驱动以后,Windows 里的这个校准功能就“消失了”,而很多方向盘自带的驱动并没有提供手动校准功能,这时候如果你需要对方向盘进行手动校准,可能就需要使用其他的工具了(后文有专述),如果你的控制器能被Windows自动识别并能使用方向盘的基本功能,并且你也不想使用方向盘驱动带来的“额外的功能”(比如微软的按键编程功能),那么我推荐你不必安装方向盘带的驱动而直接使用它。
二 方向盘的校准
1.校准的原理
前面说过,“… DirectInput 将收到的轴位置信息线性放大到 0-65535 的范围 …”方向盘输出的轴位置信息在送交 DirectInput 前是必须经过校准程序校准的,没有经过任何校准的控制器是不能工作的,校准程序所做的事情其实是告诉 DirectInput ,控制器所发送过来的轴位置数据,哪里是最小(Min)、哪里是最大(Max)、哪里是中点(Cen),而 DirectInput 并不追究 Min、Cen、Max为什么会是这些指定的数值,它只管把得到的 Min←→Cen之间的数据线性放大到 0←→32768 .而把 Cen←→Max之间的数据线性放大到 32768←→65535 。任何低于 Min 的数据都当作 Min 处理,任何高于 Max 的数据都当作 Max 处理。如此,我们就可以通过特意指定不同的 Min、Cen、Max 的数值来达到合理使用控制器的行程的目的,一个总的原则是:减少控制的有效行程来使控制器显得更加灵敏;而扩充(到)控制器的最大行程以获得最高的控制精度。
如下,某方向盘输出端的量化数据范围是 -512←→+512,通过校准以指定不同的 Min、Cen、Max数值时,方向盘的工作情况,每图中上方箭头表示游戏中的虚拟方向盘,下方箭头表示游戏控制器方向盘的物理行程。
左上(校准行程=物理行程):Min=-512 ,Cen=0, Max=512,这时候的方向盘操作与游戏中的虚拟方向盘正好是一一对应的。既使用了控制器方向盘的全部精度,又能达到最大的控制范围。此为使用得最为普遍的一类校准方式。
右上(校准行程
下(校准行程>物理行程):此为一种特殊的校准方式。通过人工指定Min、Cen、Max的数值,使它大于控制器所能输出的数值,这时候的控制器方向盘的全部行程只对应游戏中虚拟方向盘的一部分行程,因为控制器无法输出超出它的量化范围的那一部分数据,所以,游戏中的虚拟方向盘就永远也打不到极限位置,此类校准方式的理念是“集中所有能输出的控制精度来控制游戏中虚拟方向盘的一部分行程”,也就是说“牺牲控制范围以获取更大的控制精度”,一般只用于特定场合。
上述校准都属于行程校准,并且,上面所例均为左右对称式的校准方式,这里都是假设方向盘操作的物理行程与所输出的量化数据之间的对应关系是准确的,也就说,当方向盘自动回中的时候的自然位置,输出的数据正好是它所能输出的最大量化范围的中点,同时方向盘转到左右两个极限位置的时候输出的也正好是最大和最小的数据。而实际上受制造工艺的限制,以及随着使用过程造成的磨损等等多种因素的影响,很多方向盘并不(总)是那么的准确。但是,只要我们明白了校准原理,这些问题都是可以通过校准来改善的。
例:假设某方向盘的方向轴的理论输出数据范围是 -512 ← 0 → +512 ,而实际使用中测试到该方向盘自动回中时的自然位置输出的数据是20,如果这时候仍然指定 Min=-512,Cen=0,Max=512 的话,那么在游戏中,因为其自然的中心位置输出的数据并不是 0,而是 20, 该方向盘就会总是偏向一边,这时候的解决办法是通过校准指定其 Cen = 20.就能解决问题了。
还有一类校准问题是“呆区”(Deadzone)设置,所谓“呆区”,是指控制器模拟真实方向盘的自由间隙,也就是说,在其有效行程的某一部分输出的数据不做处理,比如方向盘的方向轴的呆区,是指其自由回中的位置左右的一小段行程操作会在游戏中没有反应,用以模拟方向盘的自由间隙,呆区的数值一般用百分比表示,比如方向轴的呆区如果设置成 10%,则是表示,方向盘在其中间位置的,其总有效行程的10% 的行程范围为呆区,方向盘在该区域范围内的任何移动都被当作“方向正中”处理。其内在的含义实际是指定 Cen为一定范围内的数据,而不是指定 Cen 为单一的具体数据。呆区设置为 0% 即为没有呆区。
请注意,在Windows NT/2000/XP 操作系统中不支持保存呆区设置,而在 Windows 98/ME 中是可以的。
以上说的校准和呆区设置,都是指的在进入游戏前,使用Windows 的校准程序、方向盘自带的驱动中的校准程序、以及第三方开发的专用的游戏控制器校准程序进行的校准工作,这些工作实际上都是在控制器输出的数据送交到 DirectInput 之前所做出的处理,而很多游戏在进入游戏以后也提供各种有关的控制器设置和校准功能,因为游戏在启动后可以通过“驻留处理”或者在游戏主程序中对DirectInput数据进行实时处理,这样就当然不受上述的“NT类操作系统不支持呆区设置”的限制了。