YourControls 同步引擎揭秘:LVarSyncer 与 Freezer 如何避免多人操控冲突 YourControls 同步引擎揭秘LVarSyncer 与 Freezer 如何避免多人操控冲突【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrolsYourControls 是一款面向Microsoft Flight Simulator 2020/2024的开源「共享座舱」插件主机运行模拟器远端玩家用平板或手机就能接管驾驶舱、操纵飞机。多人同机操控最怕的就是打架——两个玩家同时推油门、控制权交接时飞机悬空锁死。这篇文章带你快速看懂 YourControls 同步引擎中的两位核心成员LVarSyncer和Freezer以及它们如何保证操控权交接平滑、零冲突。YourControls 是什么多人操控为什么容易打架简单来说YourControls 把工作分成两半主机端运行飞模Simulator负责物理与画面远端端手机/平板上的触控界面把推油门关开关这类动作通过网络发给主机再实时读回驾驶舱状态。问题就出在这个双向通道上如果变量同步不及时远端看到的状态和主机真实状态会对不上如果控制权交接时不做任何处理失去控制的一方和模拟器自身的冻结逻辑就可能互相拉扯出现姿态锁定、油门来回跳等怪象。YourControls 的解法是双机制变量层用LVarSyncer做双向同步控制层用Freezer做交接锁定。LVarSyncer把驾驶舱变量变成一条双向同步通道飞模里几乎所有驾驶舱状态都是一个LVarLocal Variable本地变量比如A:AILERON POSITION副翼位置、A:BRAKE LEFT POSITION EX1左刹车位置。LVar 就是 YourControls 同步引擎的通用语言。LVarSyncer 定义在 src/yourcontrols/src/sync/transfer.rs 中核心职责有三个注册变量add_var()声明需要同步哪些 LVar还支持add_custom_var()用计算式生成自定义变量如组合多个变量得到的读数写入变量set()把远端玩家的动作数值、单位写回主机模拟器缓存最新值current_values字典保存每个变量的当前读数供界面展示和逻辑判断使用。真正干活的是底层的GaugeCommunicatorsrc/yourcontrols/src/sync/gaugecommunicator.rs它借助 SimConnect 客户端数据通道映射为YCSEND、YCSENDMULTI等通道与模拟器内的隐藏仪表交换数据每批最多打包 126 个变量定义进行批量同步效率很高。值得一提的是插值同步航向、姿态这类角度变量直接传输数值会在 0° 和 359° 之间剧烈跳变。GaugeCommunicator 内置了Wrap180 / Wrap90 / Wrap360 / Invert等插值类型把远端动画平滑地绕过去这正是多人操控时仪表不抖、画面不跳的关键细节之一。同步哪些变量全写在 YAML 配置文件里具体同步什么由definitions/目录下的 YAML 模块定义按系统拆分例如definitions/FS2020/modules/controls.yaml副翼、升降舵、方向舵、刹车等操纵面definitions/FS2020/modules/engines.yaml发动机相关变量definitions/FS2020/modules/electrical.yaml、fuel.yaml、lights.yaml等各自独立的系统每个条目都标明变量名、单位、数据类型还能附带条件比如自动油门接通时就不再同步俯仰面。想给新机型加支持照着写一份对应机型的 YAML 档案位于definitions/FS2020/aircraft/即可。Freezer控制权交接时的安全锁变量同步解决看得见的问题Freezer解决谁来开的问题。它的实现非常精干就在 src/yourcontrols/src/sync/freezer.rs。Freezer 持续监听模拟器的三个冻结状态变量IS ALTITUDE FREEZE ON高度冻结IS ATTITUDE FREEZE ON姿态冻结IS LATITUDE LONGITUDE FREEZE ON经纬度冻结工作方式分两步交接时整体加锁on_control_change()一旦检测到控制权变化远端玩家接管或交还立即批量发送FREEZE_ALTITUDE_SET、FREEZE_ATTITUDE_SET、FREEZE_LATITUDE_LONGITUDE_SET事件——接管时解除冻结交还时重新冻结。持续巡检纠偏on_vars_change()每轮比对冻结状态与应该冻结吗的预期是否一致一旦有人手动改过冻结开关导致状态漂移Freezer 会执行一次整体冻结修正把状态拉回正轨。效果就是控制权在谁手里飞机听谁的没有控制权的一方以及模拟器的默认物理逻辑被完全锁住从机制上杜绝了两个客户端互相拔河的冲突场景。如何上手获取 YourControls想亲自体验这套同步引擎直接获取项目源码即可git clone https://gitcode.com/gh_mirrors/yo/yourcontrols安装后主机启动 YourControls 应用远端玩家通过链接加入即可在平板上接管驾驶舱。项目同时维护 FS2020 与 FS2024 两套档案definitions/FS2020/与definitions/FS2024/并持续在版本日志Changelog.md中跟进各机型与触屏仪表的同步修复。小结两个组件一套无缝的多人座舱体验组件职责解决的问题LVarSyncer注册、写入、缓存 LVar 变量远端与主机状态实时一致角度平滑不跳变Freezer控制权交接时冻结/解冻并持续纠偏避免双方互相冲突、飞机悬空锁死为什么仪表不抖批量同步 Wrap 插值抹平了角度跳变为什么交接不打架Freezer 在每次控制权变化时整体加锁并持续巡检谁是权威主机端的模拟器永远是唯一物理权威远端只是输入源。理解这两个组件你就掌握了 YourControls 共享座舱体验丝滑背后的完整逻辑——变量同步负责一致冻结机制负责有序两者合力让多人操控同一架飞机变得自然可靠。✈️【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrols创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考