DCS 自定添加控制input腳本(自定按鍵與軸)
億點(diǎn)題外話
前陣子入手了成都造的f18起降面板,除了稍微貴了一點(diǎn)不過(guò)還是很香的:2個(gè)霍爾撥桿軸,一個(gè)電位器旋鈕軸,1個(gè)電位器搖桿(游戲手柄上可push的那種)+可同步燈效起落架桿等其他開(kāi)關(guān)和按鈕

當(dāng)初看中的是背光可和游戲同步,以及起落手柄燈。結(jié)果到手后驚呼被坑,原來(lái)官方當(dāng)時(shí)支持f18機(jī)模,我不甘心,簡(jiǎn)單的琢磨了下原理,感覺(jué)能自己添加支持,就一頓瞎操作修改它驅(qū)動(dòng)自帶lua腳本實(shí)現(xiàn)了對(duì)AV8b和a10c的支持。,
當(dāng)然我自己改好腳本后就聯(lián)系了官方告知了他們具體解決辦法,成都速度也很快。第2天中午就更新修好bug(早上先發(fā)現(xiàn)一個(gè)會(huì)和a10c起沖突的bug),第2天晚上就根據(jù)我提供的api在驅(qū)動(dòng)軟件內(nèi)部添加的支持列表

然后測(cè)試燈效完畢后,準(zhǔn)備把起飛面板的燈光旋鈕設(shè)定到游戲中時(shí)才發(fā)現(xiàn),游戲中這玩意是按鍵操控,而面板上這個(gè)是個(gè)軸。不過(guò)花了幾個(gè)小時(shí)后還是終于搞定了。

下面開(kāi)始正文(字?jǐn)?shù)警告,不知不覺(jué)碼字太多)
注意:修改lua文件最好使用專門(mén)的編輯器,比如notepad++或sublime text,同時(shí)做好備份原文件的準(zhǔn)備,以備不測(cè)。
同時(shí)修改機(jī)模的input文件也不會(huì)觸發(fā)dcs的文件完整性檢查
一。定位修改文件
為了給某個(gè)機(jī)型添加按鍵input控制我們首先要?jiǎng)拥氖?span id="s0sssss00s" class="color-blue-02">default.lua文件,這里面有所有操控設(shè)定,它位于
dcs安裝目錄? ? ? ? ? ? ? ? ? ? ? ? ? ? ??【機(jī)型文件夾】? ? 【機(jī)型操作類(lèi)型】?鍵盤(pán)或外設(shè)
\DCSWorld\Mods\aircraft\A-10C_2\Input\A-10C_2\joystick\default.lua
dcs安裝目錄????這個(gè)不用說(shuō),大家都知道應(yīng)該怎么找
機(jī)型文件夾??????這個(gè)也是對(duì)著找就是了。
機(jī)型操作類(lèi)型? 在某些有簡(jiǎn)易操控的飛機(jī)里有不同?區(qū)別是后面加_easy(基本是官方模組才有)
鍵盤(pán)或外設(shè)? ? ? 這層目錄有多個(gè) 我們需要改的基本是joystick和keyboard,如果需要鍵盤(pán)操作就需要改鍵盤(pán)目錄下的,2者的改法都相同。下面都以joystick目錄下改外設(shè)操控的方法做說(shuō)明
default.lua? ? ? ?這層目錄中 有的時(shí)候不只一個(gè)lua,還有很多其他以外設(shè)名字開(kāi)頭的lua文件,比如有2個(gè)文件是abc.lua和abc.diff.lua。這里dcs的邏輯是,當(dāng)你的外設(shè)名字符合abc時(shí)。首先加載abc.diff.lua、然后找是否有abc.lua、如果沒(méi)有則加載default.lua。default.lua和abc.lua是只取其一。abc.diff.lua是默認(rèn)鍵位設(shè)置,而abc.lua和default.lua才是完整配置,這才是我們需要改動(dòng)的
提示:如果當(dāng)你修改default.lua后發(fā)現(xiàn)在控制設(shè)置中無(wú)法在特定外設(shè)中設(shè)定按鍵,說(shuō)明該設(shè)備有獨(dú)立的abc.lua。我們只需要修改對(duì)應(yīng)名稱的abc.lua即可

二。找到目標(biāo)文件并確認(rèn)插入代碼的位置
編輯器打開(kāi)default.lua?,絕大部分機(jī)模這里的代碼分為3塊。
forceFeedback = {
這其中的是力回饋設(shè)置
},
keyCommands = {
這其中的代碼是按鍵設(shè)置
},
axisCommands = {
這其中的就是軸設(shè)置
},
開(kāi)發(fā)組不同這里的寫(xiě)法可能也不同,比如AV8b這里是join(res.axisCommands,{。不過(guò)沒(méi)什么影響

三。插入代碼
因?yàn)槲覀兪且砑右粋€(gè)軸控制,所以直接在axisCommands?= {下面插入一行 鍵入如下代碼,
{cockpit_device_id = devices.LTINT,action = int_light_commands.Knob_Console_Lights,name = _('Console背光燈軸控制')},
然后保存,啟動(dòng)dcs,打開(kāi)控制設(shè)置。就成功了。

主要是因?yàn)閍10c與AV8b背光燈的軸的api輸入輸出的值是0~1的浮點(diǎn)數(shù)。而一個(gè)軸在dcs中默認(rèn)輸出的是-1~1的浮點(diǎn)數(shù)。所以我們需要調(diào)整軸控制。(有部分飛機(jī)的燈光軸數(shù)據(jù)可以接受-1~1,比如米格21.具體情況自己調(diào)整)

如此這般就能正常使用外設(shè)上的軸來(lái)同步控制背光燈了

四。代碼中的參數(shù)與數(shù)值的意義
cockpit_device_id?=?代表的是要控制的部分屬于哪一快子系統(tǒng)?可寫(xiě)定義名或deviveid,注意某些機(jī)模只可id
action?=?代表的是要具體操控的按鈕是該子系統(tǒng)里的哪一個(gè) 可寫(xiě)定義名或buttonid,注意某些機(jī)模只可id
name?=?自然就是名稱定義。_('')實(shí)際是一個(gè)多語(yǔ)言翻譯函數(shù)。對(duì)應(yīng)DCSWorld\l10n\cn\LC_MESSAGES的翻譯對(duì)照表進(jìn)行整句翻譯。我們不管,只需要在里面鍵入你想取的名稱即可。
4.1另外一些不在軸中使用,而在按鍵中使用的參數(shù),以AV8b中自帶的作為例子
//這是一個(gè)AV8b的水3檔開(kāi)關(guān)的設(shè)定范例,下面這是其2條代碼中的一條
{down = engine_commands.Switch_H20,up = engine_commands.Switch_H20,cockpit_device_id?= devices.DECS,value_down?= 0.0, value_up = 0.5,name = _('H2O LN else OFF'),category = _('Joystick Switch Abstractions')},??
down = 當(dāng)設(shè)定的鍵位按下時(shí)觸發(fā)的按鈕buttonid 某些機(jī)模也使用pressed
value_down = 按下時(shí)傳遞的參數(shù)數(shù)值 使用iCommandPlanexxx方法時(shí)不需要該參數(shù)?某些機(jī)模也使用value_pressed等同value_down
pressed?= 當(dāng)設(shè)定的鍵位按下時(shí)觸發(fā)的按鈕buttonid 與down不同,當(dāng)按鍵被按住時(shí)會(huì)不停的發(fā)送該參數(shù)
value_pressed?= 傳遞的參數(shù)數(shù)值?使用iCommandPlanexxx方法時(shí)不需要該參數(shù)?
up = 當(dāng)設(shè)定的鍵位彈起時(shí)觸發(fā)的按鈕buttonid
value_up = 彈起時(shí)傳遞的參數(shù)數(shù)值?使用iCommandPlanexxx方法時(shí)不需要該參數(shù)??
category = 該按鍵設(shè)定屬于哪個(gè)分類(lèi)下。分類(lèi)定義。值同name使用_('')
4.2其他可用參數(shù),以AV8b中自帶的作為例子
{combos = defaultDeviceAssignmentFor("pitch") ,? action = iCommandPlanePitch,?name = _('Pitch')},
combos?表示的是默認(rèn)鍵位設(shè)定的是某某軸/鍵位。這個(gè)軸通過(guò)defaultDeviceAssignmentFor("pitch") 這個(gè)方法讀取dcs設(shè)定的某個(gè)默認(rèn)設(shè)定。一般我們自定按鍵可以不需要設(shè)定這個(gè)參數(shù)。
自帶的action?中的定義iCommandPlanePitch,會(huì)在很多地方看到類(lèi)似的?iCommandPlanexxxxxxxxxxx,這是封包在機(jī)模的dll中,作為內(nèi)部的調(diào)用方式來(lái)實(shí)現(xiàn)的。如果使用iCommandPlane的方法,就不需要定義cockpit_device_id參數(shù)

五。如何查找參數(shù)的數(shù)據(jù)
經(jīng)過(guò)上面的說(shuō)明,鍋碗瓢盆都有了,最關(guān)鍵的菜從哪里來(lái)呢。。
5.1找到按鈕/開(kāi)關(guān)/旋鈕的定義名稱
? ? ?TIP.在dcs當(dāng)中所有可輸出顯示數(shù)據(jù)的元素都有一個(gè)唯一的InterfaceID。這些元素包括這種可操控的按鈕,旋鈕,開(kāi)關(guān)、 以及表示飛機(jī)狀態(tài)的各種參數(shù)。這些id基本上是在機(jī)模的Scripts腳本目錄中定義的。除去那些只負(fù)責(zé)輸出顯示數(shù)據(jù)的InterfaceID??刹倏氐亩歼€有deviveid和buttonid。絕大部分可交互操控的都位于[機(jī)型文件夾]\Cockpit\(或者是子目錄Scripts)目錄下的clickabledata.lua之中。我們要操縱的開(kāi)關(guān)是同時(shí)具有用于操控的deviveid和buttonid、以及用于輸出狀態(tài)的InterfaceID。
當(dāng)我們需要實(shí)現(xiàn)一個(gè)操控時(shí),要先定位這個(gè)開(kāi)關(guān)/按鈕的deviveid和buttonid。方法很多、我個(gè)人通常是多種方式使用;
通過(guò)關(guān)鍵字去github上找InterfaceID、再用找到的InterfaceID去clickabledata.lua查找或者直接用關(guān)鍵字去clickabledata.lua查找,再驗(yàn)證找到的InterfaceID是否正確。
其實(shí)還可以通過(guò)按鍵設(shè)定里的中文名字,去搜翻譯對(duì)照表的原文,再用原文去搜clickabledata.lua,但是這一步還涉及到反編譯mo漢化文件,不深入講解了。
一般來(lái)說(shuō)通過(guò)關(guān)鍵字找到的字符串就能判斷出是否正確。
這里推薦2個(gè)github:
一是某佬轉(zhuǎn)存并維護(hù)的ExportScripts腳本,里面有很多機(jī)模的InterfaceID。缺點(diǎn)是ExportScripts早已被原作者咕咕咕了,很多是2年前的數(shù)據(jù) 有些機(jī)模都沒(méi)更新了? ?https://github.com/jieweiyang/DCS-ExportScripts/blob/master/Scripts/DCS-ExportScript/ExportsModules/
二是helios的github,這里的都是比較新的,缺點(diǎn)也很明顯,只有部分機(jī)型有https://github.com/HeliosVirtualCockpit/Helios/tree/master/Helios/Interfaces/DCS??點(diǎn)進(jìn)去 查看各個(gè)飛機(jī)目錄里Interface.cs的源碼
5.2如果找到的定義名稱不可直接使用,則找它們的Index序號(hào)。(看5.4注意事項(xiàng))
deviveid查找devices.lua中對(duì)應(yīng)名稱的序號(hào),一般在后面會(huì)有注釋index。如果沒(méi)有就從上往下一個(gè)個(gè)的數(shù)
buttonid查找command_defs.lua中device_commands.xxx的定義的序號(hào)。
5.3確定按鈕值。
value_down?=或?value_up?=?的值 還是在clickabledata.lua中查看,這一部分解釋起來(lái)比較繁瑣。
dcs中大部分按鈕和軸所接受的數(shù)值基本上都是-1~1之間,有整數(shù) 也有小數(shù)。
如果會(huì)一點(diǎn)腳本語(yǔ)言,可以查看其調(diào)用的函數(shù),查看函數(shù)中定義的arg_value和arg_lim來(lái)確定開(kāi)關(guān)狀態(tài)值。然而這部分實(shí)在是難以用傻瓜化的教程教會(huì)大家,這里只能自己多多摸索或者反復(fù)試錯(cuò)了。
大部分2檔開(kāi)關(guān)要么是0.0或者1.0
3檔開(kāi)關(guān)有可能是-1.0和0.0和1.0,也有部分機(jī)模是0.0和0.5和1.0
還有部分那種多檔旋鈕開(kāi)關(guān)的 就是0.0和0.1和0.2和0.3到1.0這樣的
機(jī)模不同,開(kāi)發(fā)組不同,定義按鈕參數(shù)都沒(méi)有統(tǒng)一,只能多試或多查看函數(shù)
5.4注意事項(xiàng)
在某些機(jī)模中?down??up?cockpit_device_id?action?這些參數(shù)不可寫(xiě)定義名稱,只能使用id數(shù)字,比如A10C。
當(dāng)你第一次用定義名稱?啟動(dòng)游戲在控制設(shè)置中發(fā)現(xiàn)該機(jī)模沒(méi)有顯示任何按鍵設(shè)置 就是不兼容,換id吧

六。簡(jiǎn)單實(shí)例
a10c的3檔襟翼設(shè)定,默認(rèn)給的是適合用2個(gè)鍵盤(pán)按鍵來(lái)操控的設(shè)定,按一次往上或往下?lián)軇?dòng)一次開(kāi)關(guān),雖然ed專門(mén)寫(xiě)了內(nèi)置的適合豬油那種2鍵3檔開(kāi)關(guān)的方法,但我們暫時(shí)先不使用內(nèi)置方法來(lái)講解。
--適合2鍵型3檔開(kāi)關(guān)on-off-on? ? ? 缺陷:中位無(wú)法同步(內(nèi)置方法同樣無(wú)法同步中位)
{down = 3002, up = 3002, cockpit_device_id = 39,value_down = 0.0, value_up = 0.5, name = _('襟翼上/中'), category = _('Systems')},
{down = 3002, up = 3002, cockpit_device_id = 39,value_down = 1.0, value_up = 0.5, name = _('襟翼下/中'), category = _('Systems')},
39是襟翼所在的devices.CPT_MECH模塊id,3002則是該模塊的第2按鈕id。0.0是開(kāi)關(guān)在UP位時(shí)的狀態(tài),中位是0.5 ,DOWN則是1.0。將外設(shè)的上檔位綁定第1條,下檔位按鈕綁定第2條。
當(dāng)按鈕被撥動(dòng)到上檔時(shí),觸發(fā)down按下事件,傳遞0.0參數(shù)到39的3002按鈕,襟翼被設(shè)為收起;當(dāng)按鈕從上檔位撥動(dòng)到中時(shí),觸發(fā)上檔位按鈕的up彈起事件,傳遞0.5參數(shù)到39的3002按鈕,襟翼被設(shè)為起飛檔。
看似很完美,但是由于2鍵型3檔開(kāi)關(guān)的中位其實(shí)沒(méi)鍵位的,只能由上或下?lián)軇?dòng)到中位時(shí)的up事件來(lái)響應(yīng),而dcs中的同步hotas設(shè)備功能是無(wú)法同步up事件的。
所以就有了下面這種寫(xiě)法,適合有3鍵3檔位開(kāi)關(guān)的外設(shè)。
--完美對(duì)應(yīng)3鍵模式on-on-on
{down = 3002, cockpit_device_id = 39,value_down = 0.0, name = _('襟翼上'), category = _('Systems')},
{down = 3002, cockpit_device_id = 39,value_down = 0.5, name = _('襟翼中'), category = _('Systems')},
{down = 3002, cockpit_device_id = 39,value_down = 1.0, name = _('襟翼下'), category = _('Systems')},
給外設(shè)的上中下鍵位分別設(shè)定即可。
七。特殊實(shí)例
DCS中還有很多很奇特的開(kāi)關(guān)。這些開(kāi)關(guān)要么是有遠(yuǎn)古模塊遺留下來(lái)所引發(fā)的缺陷,有要么是某些開(kāi)發(fā)組瞎造輪子不按套路出牌整出來(lái)的。要來(lái)自定它們的功能,真的是非常麻煩以及很難達(dá)到效果
7.1添加2檔開(kāi)關(guān)型防滑開(kāi)關(guān),適用與2鍵型2檔開(kāi)關(guān)或1鍵型2檔開(kāi)關(guān)(A10C)
2鍵型2檔開(kāi)關(guān):代表 成都的起降、火控面板的2檔開(kāi)關(guān)
? ? 這種開(kāi)關(guān)的特點(diǎn)是3線接線,電氣特性是ON-ON。在游戲控制器上是作為2個(gè)按鍵來(lái)看待,來(lái)回?fù)軇?dòng)時(shí) 屬于[按鍵1彈起按鍵2按下]?[按鍵2彈起按鍵1按下]的切換,也就是2個(gè)按鍵一直有一個(gè)處于按住的狀態(tài)。用鍵盤(pán)理解就是 1個(gè)手指交替按住2個(gè)鍵中的一個(gè)。
(注意,成都造實(shí)際可能也還是2線接線,由固件模擬出的2鍵。而且目前還有點(diǎn)邏輯問(wèn)題)
1鍵型2檔開(kāi)關(guān):代表 疣豬油門(mén)的2檔開(kāi)關(guān)
? ??這種開(kāi)關(guān)的特點(diǎn)是2線接線,電氣特性是ON-OFF。在游戲控制器上是作為1個(gè)按鍵來(lái)看待,來(lái)回?fù)軇?dòng)時(shí)?屬于[按鍵1按下]?[按鍵1彈起]的切換。用鍵盤(pán)理解就是一只手指按住一個(gè)按鍵 與松開(kāi)
而A10C上默認(rèn)的防滑開(kāi)關(guān)是一個(gè)切換型,通過(guò)設(shè)定一個(gè)按鍵在開(kāi)啟與關(guān)閉2個(gè)狀態(tài)之間切換,這肯定不符合我們要用在的2檔開(kāi)關(guān)上,不論是2檔三線開(kāi)關(guān)?還是2檔二線開(kāi)關(guān)。
根據(jù)上面的思路找到防滑開(kāi)關(guān)并設(shè)定數(shù)值:
{down = 3028,cockpit_device_id = 38, value_down = 1,?name = _('防滑開(kāi)關(guān) 開(kāi)啟'), category = _('Landing gear panel')},
{down = 3028, cockpit_device_id = 38, value_down = 0, name = _('防滑開(kāi)關(guān) 關(guān)閉'), category = _('Landing gear panel')},
可是!目前a10c里的防滑開(kāi)關(guān)有比較坑爹的情況存在
在A10C里 這個(gè)防滑開(kāi)關(guān)的定義是“電磁保持開(kāi)關(guān)”。我們先不談現(xiàn)實(shí)的電磁保持開(kāi)關(guān)的特性,單說(shuō)在游戲里的參數(shù)特性:在這一個(gè)開(kāi)關(guān)里 它有2個(gè)buttonId。都只接受1和0的參數(shù):
按鈕1的參數(shù)1是切換。從on切換到off或者從off切換到on,參數(shù)0只能將on切換到off。
按鈕2的參數(shù)0沒(méi)有任何用處,參數(shù)1只能將off變成on位,且只有外觀作用,實(shí)際游戲中的開(kāi)關(guān)邏輯沒(méi)有打開(kāi),所以按鈕2可以無(wú)視。
因如上的特性,在實(shí)際綁定按鍵后且開(kāi)啟了dcs設(shè)置的“任務(wù)時(shí)同步HOTAS設(shè)備”時(shí) 就會(huì)用同步錯(cuò)誤出現(xiàn),比如外設(shè)的設(shè)備明明是關(guān)的狀態(tài),游戲是開(kāi)的?;蜿?dòng)開(kāi)關(guān)時(shí)游戲內(nèi)無(wú)反應(yīng) 要多掰動(dòng)2次之后才正常。
A10C中使用這種內(nèi)部邏輯方式的按鈕有7個(gè),均為電磁保持開(kāi)關(guān),分別是防滑開(kāi)關(guān),EAC預(yù)位開(kāi)關(guān),防撞燈,SAS偏航及俯仰增穩(wěn)通道的4個(gè)開(kāi)關(guān)。而EAC開(kāi)關(guān) ED為它寫(xiě)了內(nèi)部iCommand方法來(lái)實(shí)現(xiàn)開(kāi)及關(guān)的狀態(tài),用于適配豬油上的EAC開(kāi)關(guān)。
至此 這個(gè)防滑開(kāi)關(guān)沒(méi)有完美適配的辦法嗎?是的 可惜沒(méi)有。除非ed為它們都寫(xiě)上iCommand方法。目前針對(duì)2鍵型2檔開(kāi)關(guān)有一個(gè)湊合還算能用的狀態(tài)(任務(wù)開(kāi)始時(shí)游戲內(nèi)防滑開(kāi)關(guān)是on時(shí))(任務(wù)開(kāi)始時(shí)游戲內(nèi)是off時(shí),外設(shè)開(kāi)關(guān)在on位置無(wú)法同步游戲內(nèi)的開(kāi)關(guān)到on)我們這樣寫(xiě):
{down = 3028, up = 3028, cockpit_device_id = 38, value_down = 0, value_up = 1, name = _('防滑開(kāi)關(guān) 按住關(guān)閉松開(kāi)開(kāi)啟'), category = _('Landing gear panel')},
通俗來(lái)講,就是我們將外設(shè)上這個(gè)開(kāi)關(guān)的OFF位綁定上面的代碼,這個(gè)開(kāi)關(guān)的ON位不綁定任何東西。用OFF位的按下來(lái)關(guān)閉,用OFF位的彈起來(lái)開(kāi)啟。這是利用dcs的同步功能不響應(yīng)UP事件的特性。
而針對(duì)1鍵型2檔開(kāi)關(guān)的外設(shè)來(lái)說(shuō) 還是湊合用下面這種吧
{down = 3028, up = 3028, cockpit_device_id = 38, value_down = 1, value_up = 0, name = _('防滑開(kāi)關(guān) 按住開(kāi)啟松開(kāi)關(guān)閉'), category = _('Landing gear panel')},

7.2添加精準(zhǔn)控制的HDG、CRS旋鈕(F18暫時(shí)除外)
TIP.如果有用成都面板或者其他有編碼器旋鈕外設(shè)的飛友們,如果直接將旋鈕設(shè)定給機(jī)模默認(rèn)提供的按鍵操作 可能會(huì)遇見(jiàn)轉(zhuǎn)動(dòng)旋鈕沒(méi)反應(yīng) 或者快速旋轉(zhuǎn),但是游戲中才轉(zhuǎn)了一點(diǎn)的現(xiàn)象。這主要是可能是因?yàn)樵嫉牟僮髂J绞墙o鍵盤(pán)使用的。那個(gè)機(jī)制據(jù)我判斷是通過(guò)按住的按鍵時(shí)長(zhǎng)來(lái)控制游戲內(nèi)的旋鈕轉(zhuǎn)多久,而大部分外設(shè)編碼器是快速發(fā)送按下并彈起的按鍵信號(hào),通常維持住的按住時(shí)長(zhǎng)在5~20ms之間。
我們現(xiàn)在要自己添加一個(gè)控制方式給編碼器用,并且希望實(shí)現(xiàn)編碼器每轉(zhuǎn)動(dòng)一個(gè)觸發(fā)、游戲內(nèi)就轉(zhuǎn)動(dòng)1度的功能.
那么先看代碼,以A10C為例,
{down = 3001, cockpit_device_id = 45,value_down = math.rad(1),name = _('HSI 航向旋鈕 向右 步進(jìn)1度'), category = _('Systems')},
{down = 3001, cockpit_device_id = 45,value_down = -math.rad(1),name = _('HSI 航向旋鈕 向左 步進(jìn)1度'), category = _('Systems')},
其他的參數(shù)常考上面的方法去尋找,這里最關(guān)鍵的是math.rad(1)這個(gè)參數(shù)。
以往別的插件或者默認(rèn)操作的最小單位 在這個(gè)值這里設(shè)定的是0.01。而通過(guò)查看a10c的hsi代碼HSI_param.lua我們能發(fā)現(xiàn)
ptrsBias = {{valmin = math.rad(0), valmax = math.rad(360), bias = math.rad(1)}}
旋鈕的值與度數(shù)采用的是角度弧度公式來(lái)計(jì)算的。最小單位是1度的弧度值math.rad(1)=0.0174532925199433。
那么我們就可以直接把math.rad(1)作為步進(jìn)數(shù)值填入。
但是這里有一個(gè)小問(wèn)題,無(wú)論你是填入math.rad(1)還是0.0174532925199433,dcs的input代碼處理的時(shí)候 都會(huì)將參數(shù)作為單浮點(diǎn)來(lái)處理(0.01745329)(推測(cè)的)。而helios可以傳入雙浮點(diǎn)數(shù)據(jù)(0.0174532925199433)給dcs且dcs支持。所以最終的情況就是 調(diào)整后,通過(guò)helios轉(zhuǎn)十幾個(gè)360度,航線的數(shù)字標(biāo)識(shí)也不會(huì)錯(cuò)位。而用input代碼控制使用外設(shè)編碼器轉(zhuǎn)個(gè)2-3圈的360度,數(shù)字標(biāo)識(shí)就開(kāi)始錯(cuò)位了。不過(guò)這點(diǎn)小問(wèn)題并不礙事,畢竟一般來(lái)說(shuō)也不太可能連續(xù)轉(zhuǎn)個(gè)2圈以上了。只要不是強(qiáng)迫癥就無(wú)所謂

另外:關(guān)于同步,雖然把所有off位都設(shè)定為能同步更擬真一些,但是在某些剛開(kāi)始任務(wù)的場(chǎng)景下,并不是說(shuō)所有按鈕都設(shè)定同步為好。某些按鈕能用一條有down和up的代碼來(lái)實(shí)現(xiàn),并且off的同步與否并不十分必要的話,就沒(méi)有必要寫(xiě)2條down的代碼去實(shí)現(xiàn)off的同步。這其實(shí)還是看個(gè)人習(xí)慣與外設(shè)是否支持off位設(shè)鍵位了

碼字太多,寫(xiě)到后面發(fā)現(xiàn)有些地方寫(xiě)的并不是很完善,而且很多時(shí)候是想到什么就寫(xiě)上什么,顯得有點(diǎn)亂,b站專欄似乎并不適合寫(xiě)需要經(jīng)常修改更新的文字內(nèi)容,況且還有發(fā)布后編輯限制,就離譜。。。文中有錯(cuò)誤或疏漏歡迎各位大佬指點(diǎn)、評(píng)論留言查漏補(bǔ)缺
后續(xù)咕咕咕我會(huì)放個(gè)我用獵戶油門(mén) 和成都起降面板的設(shè)定,來(lái)介紹下我改了哪些按鍵、并如何分配操作的