YourControls FS2024 适配之路:从 Gauge 到 JS Communicator 的完整演进
2026/8/27 16:29:27 网站建设 项目流程

YourControls FS2024 适配之路:从 Gauge 到 JS Communicator 的完整演进

【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrols

YourControls 是一款专为 Microsoft Flight Simulator(MSFS)打造的开源共享驾驶舱工具,让联机飞行的多位玩家共享同一架飞机的操纵与状态。它的 FS2024 适配之路正是本文主角:从传统 C++ Gauge 通信桥,全面演进到基于 WebSocket 的 JS Communicator,并实现了 FS2020 / FS2024 双版本档案分离。本文用通俗的语言带你走完这段技术演进。

什么是共享驾驶舱,为什么需要通信桥

想象你和朋友联机飞同一架飞机:一人开飞机,一人管无线电和检查单。为了让每个人的界面都保持同步,YourControls 需要在模拟器内部"偷看"并"写入"驾驶舱变量(油门、航向、无线电频率等)。

在 FS2020 时代,它采用的经典方案是Gauge 通信机制

  • 通过 SimConnect 的客户端数据区(Client Data Area)与一个驻留在模拟器内的仪表(gauge)交换数据;
  • 程序把变量定义打包成批量消息发送,再周期性读回数值;
  • 这套机制由 gaugecommunicator.rs 实现,配合 transfer.rs 完成"发送定义 → 接收数值"的完整往返。

这套方案在 FS2020 上运行多年,稳定可靠,但它绑定了一个前提——模拟器支持传统的 C++ 仪表环境。

FS2024 为什么逼出了 JS Communicator

微软在 FS2024 中大幅转向 JavaScript 仪表生态,传统 Gauge 的通信通道随之失效。早期的直接移植导致大量元素损坏,官方更新日志中也能看到反复修复的痕迹(如"Fixed position freeze on FS2024"、"Most elements broken on FS2024 should now work"),详见 Changelog.md。

于是项目团队做了一个关键决策:放弃 Gauge,改走 WebSocket。新的通信器由 jscommunicator.rs 实现,思路非常简洁:

  1. 在本地0.0.0.0:7780端口启动一个 WebSocket 监听器;
  2. FS2024 面板中的 JS 仪表主动连入,并通过Handshake消息自报仪表名称;
  3. 之后所有同步(按键输入、屏幕交互、时钟时间)都通过 JSON 消息在这条双向通道里流动。

JS Communicator 的四种消息类型

从源码可以看到,通信载荷被设计成四种清晰的消息类型(定义在JSPayloads枚举中):

消息方向作用
Handshake面板 → 程序连接握手,声明仪表名称
Interaction面板 → 程序报告触摸屏上的点击交互
Input双向传递具体控件的键入值(如 MCDU 输入)
Time/RequestTime双向同步模拟时间

这些消息的收发逻辑集中在 definitions.rs 中统一调度:程序轮询jstransfer.poll()取出消息,再根据类型分发处理;需要下发时调用write_payload()定向发送给指定仪表或广播给全部仪表。对普通用户而言,这意味着 G3000、GTN 等大屏的触屏操作也能跨玩家同步——这正是 2.8.9 版本"Touchscreen interaction fixed (G3000/GTN)"背后的能力来源。

档案结构升级:FS2020 与 FS2024 分而治之

FS2024 适配的另一大功臣是档案目录的重构。项目把所有飞机与模块的 YAML 定义拆分到了两个平行目录:

  • FS2020 档案:definitions/FS2020/
  • FS2024 档案:definitions/FS2024/

每个版本下都包含aircraft/(机型档案)与modules/(自动驾驶、燃油、灯光等通用模块),例如 definitions/FS2024/ 下已收录 FlyByWire A380、PMDG 之外的 Fenix A320ceo、COWS DA42 等 2024 专用机型,而仪表档案如 AS_G3000.yaml 也按版本各有一份。

路径解析由 paths.rs 负责——它根据当前模拟器版本决定加载哪一套目录,用户界面上则对应一个独立的 FS2024 机型下拉框(见 web/main.js 中对fs2024-list的处理),这一改动就出现在 2.8.12 版本更新中。

从更新日志看适配时间线 🛫

把 Changelog.md 中涉及 FS2024 的版本串起来,就是一条清晰的适配路线:

  • 2.8.9:主体适配完成——"Most elements broken on FS2024 should now work",触屏交互修复,时间同步抖动解决;
  • 2.8.10:继续补漏——2020 机型在 2024 下的电路/灯光/配平修复,触控屏按键输入、ID 哈希优化;
  • 2.8.11:稳定性收尾——修复 FS2024 位置冻结、移除残留的失效物理修正器、设置即时生效;
  • 2.8.12:体验优化——FS2024 机型独立下拉列表,档案目录完成 FS2020/FS2024 拆分(外部档案需同步更新)。

可以看到,这条路线的本质是:先用 JS Communicator 打通通信大动脉,再用双版本档案体系消化机型差异,最后以稳定性和易用性收尾

写在最后

YourControls 的 FS2024 适配是"跟随平台演进"的典型案例:当微软把驾驶舱的未来交给 JavaScript,共享驾驶舱工具也随之从 C++ Gauge 的内存交换走向 WebSocket + JSON 的现代架构。对普通用户来说,这一切是透明的——你只需安装最新版,在界面中选择 2020 或 2024 机型档案,即可和搭档共享同一座驾驶舱;而对想深入源码的开发者,src/yourcontrols/src/sync/ 目录下的五个通信模块(Gauge、JS、内存写入、冻结检测、传输调度)正是理解整个架构的最佳入口。

【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrols

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询