方向盘原理
方向盘是一种特别为赛车游戏设计的专用游戏控制器。
要简要说明方向盘原理,首先需要说明一下一个概念:控制器的“轴”(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获得玩家的操作信息从而实现游戏的操作。
以上过程中,玩家对某一个轴的操作可能是无极的,但控制器内部处理芯片将轴位置信息量化后不可能是无极的,每一个轴都会用一定的数值范围来代表相应的轴位置信息,然后处理芯片会将这个范围划分成若干段(通常为等分)来表示实际的轴位置信息,“将某一个轴的位置信息量化的级数”就是说,在控制器的输出端,能将某一个轴分成多少个过渡的中间状况,也就是该控制器的某一给定轴的精度,控制器的各轴的精度是控制器固有的内在品质,也是衡量控制器性能的重要指标之一。
注意量化范围并不一定就是实际精度,比如微软PrecisionWheel方向盘的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=-256,Cen=0,Max=256,这一类校准方式只使用了游戏控制器方向盘物理行程的一部分(图中举例为1/2),能使方向盘操作起来显得更加“灵敏”。也就是说,控制器方向盘转到一半行程的时候,游戏中的虚拟方向盘就已经转到极限位置了。多用于需要非常灵活控制的场合。注意,此类校准方式因为只使用了控制器方向盘的一部分行程,未使用的那一部分行程输出的数据全部当作Min或Max处理,此时的控制器的实际操作分辨率将取决于只使用了的那一部分行程的实际分辨率了。所以,实际上也就牺牲了控制器的一部分精度! 下(校准行程>物理行程):此为一种特殊的校准方式。通过人工指定Min、Cen、Max的数值,使它大于控制器所能输出的数值,这时候的控制器方向盘的全部行程只对应游戏中虚拟方向盘的一部分行程,因为控制器无法输出超出它的量化范围的那一部分数据,所以,游戏中的虚拟方向盘就永远也打不到极限位置,此类校准方式的理念是“集中所有能输出的控制精度来控制游戏中虚拟方向盘的一部分行程”,也就是说“牺牲控制范围以获取更大的控制精度”,一般只用于特定场合。