未安装方向盘自带的驱动而是让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=-256,Cen=0,Max=256,这一类校准方式只使用了游戏控制器方向盘物理行程的一部分(图中举例为1/2),能使方向盘操作起来显得更加“灵敏”。也就是说,控制器方向盘转到一半行程的时候,游戏中的虚拟方向盘就已经转到极限位置了。多用于需要非常灵活控制的场合。注意,此类校准方式因为只使用了控制器方向盘的一部分行程,未使用的那一部分行程输出的数据全部当作Min或Max处理,此时的控制器的实际操作分辨率将取决于只使用了的那一部分行程的实际分辨率了。所以,实际上也就牺牲了控制器的一部分精度!
下(校准行程>物理行程):此为一种特殊的校准方式。通过人工指定Min、Cen、Max的数值,使它大于控制器所能输出的数值,这时候的控制器方向盘的全部行程只对应游戏中虚拟方向盘的一部分行程,因为控制器无法输出超出它的量化范围的那一部分数据,所以,游戏中的虚拟方向盘就永远也打不到极限位置,此类校准方式的理念是“集中所有能输出的控制精度来控制游戏中虚拟方向盘的一部分行程”,也就是说“牺牲控制范围以获取更大的控制精度”,一般只用于特定场合。
上述校准都属于行程校准,并且,上面所例均为左右对称式的校准方式,这里都是假设方向盘操作的物理行程与所输出的量化数据之间的对应关系是准确的,也就说,当方向盘自动回中的时候的自然位置,输出的数据正好是它所能输出的最大量化范围的中点,同时方向盘转到左右两个极限位置的时候输出的也正好是最大和最小的数据。而实际上受制造工艺的限制,以及随着使用过程造成的磨损等等多种因素的影响,很多方向盘并不(总)是那么的准确。但是,只要我们明白了校准原理,这些问题都是可以通过校准来改善的。
例:假设某方向盘的方向轴的理论输出数据范围是-512←0→+512,而实际使用中测试到该方向盘自动回中时的自然位置输出的数据是20,如果这时候仍然指定Min=-512,Cen=0,Max=512的话,那么在游戏中,因为其自然的中心位置输出的数据并不是0,而是20,该方向盘就会总是偏向一边,这时候的解决办法是通过校准指定其Cen=20.就能解决问题了。
还有一类校准问题是“呆区”(Deadzone)设置,所谓“呆区”,是指控制器模拟真实方向盘的自由间隙,也就是说,在其有效行程的某一部分输出的数据不做处理,比如方向盘的方向轴的呆区,是指其自由回中的位置左右的一小段行程操作会在游戏中没有反应,用以模拟方向盘的自由间隙,呆区的数值一般用百分比表示,比如方向轴的呆区如果设置成10%,则是表示,方向盘在其中间位置的,其总有效行程的10%的行程范围为呆区,方向盘在该区域范围内的任何移动都被当作“方向正中”处理。其内在的含义实际是指定Cen为一定范围内的数据,而不是指定Cen为单一的具体数据。呆区设置为0%即为没有呆区。
请注意,在WindowsNT/2000/XP操作系统中不支持保存呆区设置,而在Windows98/ME中是可以的。
以上说的校准和呆区设置,都是指的在进入游戏前,使用Windows的校准程序、方向盘自带的驱动中的校准程序、以及第三方开发的专用的游戏控制器校准程序进行的校准工作,这些工作实际上都是在控制器输出的数据送交到DirectInput之前所做出的处理,而很多游戏在进入游戏以后也提供各种有关的控制器设置和校准功能,因为游戏在启动后可以通过“驻留处理”或者在游戏主程序中对DirectInput数据进行实时处理,这样就当然不受上述的“NT类操作系统不支持呆区设置”的限制了。
2.校准的操作
明白了校准的原理以后,下面再来说说校准的实际操作,我这里将校准分为“自动校准”、“半自动校准”、“手动校准”三种情况来叙述。
首先说说半自动校准:这里以Windows“控制面板/游戏控制器/控制器属性/校准”提供的校准程序为例说明半自动校准的操作(大部分方向盘如果安装了盘带的驱动,则屏蔽掉了控制面板里的这个校准功能而用驱动程序的相关设置界面取而代之了)
在提示“将手柄转动几圈,然后按控制器上的按钮”的时候,勾选“显示原始数据”可以看到控制器输出的实际数据。这时候,转动方向盘,输出的数据会实时显示出来,注意,在这个过程中,校准程序会将实际输出的所有数据的最小部分设置为Min,而将收到的最大的数据设定为Max,在“下一步”即“将手柄放在中间并按控制器上的按钮的时候”,它将你那时候的控制器位置输出的实际数据设置为Cen。这里实际上就提供了比较完善的手动校准功能了,如果你想做一个如前文所述的“校准行程<物理行程”的校准方式,那么在转动方向盘的时候,你就不要把方向盘转到头,而只转到你想要设置的位置就可以了。比如你的方向盘实际物理行程有左右各90度,而你想只用左右各60度,那么在“将手柄转动几圈,然后按控制器上的按钮”的时候,你只将方向盘转动到左右各60度,然后就按钮确定就可以了。半自动校准程序通常可以进行“校准行程=物理行程”和“校准行程<物理行程”这两类方式的校准。另外说明一下,某些游戏里在进入游戏后提供的控制器校准功能基本也属于这一类。操作类似。