
触发场景项目为 OpenYRWeb红警2 / 尤里的复仇 浏览器移植引擎自托管问题出现在战场内自绘光标上。现象是战场中光标移动速度异常——初始约桌面速度的 10%慢 10 倍修复一轮后反而约桌面 10 倍快 10 倍。环境为 VivaldiChromium 150、macOS、本地node server/index.mjs 8081、MOD 数据注入浏览器 OPFS。决定性线索是退出 pointer lock 后光标恢复正常速度与桌面完全一致说明差异只在 lock 模式的坐标路径。谬误溯源源码验证实测下面结合源码确认光标坐标链路与根因。光标坐标链路src/gui/Pointer.ts.js非 lock 模式position pageX - canvasMetrics.x绝对坐标1:1 正常。lock 模式position e.movementX/movementY增量累积速度取决于浏览器提供的 movementX。战场进入时主动 lockGameScreen.ts.jsthis.pointer.lock()。根因引擎请求 pointer lock 时带{ unadjustedMovement: !mouseAcceleration.value }“鼠标加速”设置默认关闭 →unadjustedMovement: true。Chromium 150Vivaldi在 macOS 上启用 unadjustedMovement 时movementX/Y 约为真实位移的 0.1 倍 → 光标慢 10 倍。修复恒禁用 unadjustedMovement三处request({ unadjustedMovement: !1 })→ movementX 走系统指针路径与桌面光标 1:1无加速度。实测验证修复前游戏内0.1×桌面误加 ×10 补偿后10×桌面移除补偿、仅保留禁用后1×桌面正确。缓存坑验证必须硬刷新build 是全量rmSync(BUILD)清空重建且 serve 返回Cache-Control: no-cache但浏览器仍可能缓存 dist JS第一次“还是慢”实为旧 build必须CmdShiftR硬刷新后验证。排查过程中先后踩过三个误区逐一记录如下。1. 误区「canvas 尺寸/DPR 问题」实测主菜单 canvas 缓冲与 CSS 显示一致1280x720 1:1、引擎未调用setPixelRatio光标映射与 DPR 无关排除。2. 误区「unadjustedMovement 是根因」禁用它后仍慢——实际是浏览器缓存了旧 JSbuild 全量重建但浏览器未硬刷新验证结果失真误导了后续判断。3. 误区「movementX 慢就乘补偿因子」根据“慢 10 倍”加 ×10 补偿结果光标快 10 倍——补偿只在输入确实失真时可用且必须先排除缓存等干扰再动补偿。落地结论方案是 pointer lock 请求恒禁用 unadjustedMovementmovementX 走系统指针路径光标与桌面 1:1、无加速度用户“没开加速”时即线性。要点是改光标速度前先排除浏览器缓存硬刷新不要凭一次观察就加缩放补偿补偿极易过度对比基准桌面 vs 游戏内要明确。适用范围为 Chromium 系浏览器Chrome/Edge/Vivaldi在 macOS 上的 pointer lock 光标速度问题同样思路可用于 FPS 类 Web 游戏。人类开发者自查战场中 F12 console 执行document.addEventListener(mousemove,econsole.log(e.movementX))移动鼠标对比实际位移。验证CmdShiftR硬刷新后再测可用 curl 确认 serve 返回的新 JS 内容。对话式 AI一句话问法「Chromium 150 下 pointer lock 光标移动慢 10 倍怎么修」回答要点检查 unadjustedMovement——macOS 上 true 会使 movementX 缩水约 0.1 倍禁用false走系统路径即可 1:1排除浏览器缓存后再做缩放补偿。代码 Agent可执行流程grep pointer lock 请求点 → 把 unadjustedMovement 恒置 false → 全量 build → 确认产物 → 提示用户硬刷新验证不要直接加 movementX 缩放补偿。