# GPS 点动画系统方案 > 文档版本:v1.0 > 最后更新:2026-04-02 ## 目标 把 GPS 点从“静态定位点”升级成**状态驱动的动态标记系统**: - 停止时是一种动画 - 移动时是一种动画 - 高速时是一种动画 - 高压/危险状态时还能叠加额外张力 原则: - 优先程序化动画,不先上重资源 - 不破坏当前位置识别性 - 必须兼容 `standard / lite` - 品牌 logo 只是贴片,不替代定位点本体和朝向三角 ## 状态分层 ### 1. 运动状态 - `idle` - 基本静止 - 轻呼吸 - 不拖尾 - `moving` - 正常行走/跑动 - 有轻微动势和尾迹 - `fast-moving` - 明显高速 - 更强脉冲 - 更长尾迹 - 朝向更锐利 ### 2. 危险/高压状态 - `warning` - 由心率/张力状态触发 - 不替代运动判断,而是在视觉上给 GPS 点额外警示感 - 更暖的色彩张力 - 更强的外环脉冲 ## 第一阶段实现范围 ### 默认动画 profile - `dynamic-runner` 后续预留: - `minimal` - `warning-reactive` ### 第一阶段具体表现 #### `idle` - 慢节奏呼吸 - 基本无拖尾 - 方向三角稍收敛 #### `moving` - 普通脉冲 - 后侧轻尾迹 - 方向三角略放大 #### `fast-moving` - 更快脉冲 - 更长尾迹 - 本体略放大 - 方向三角更强 #### `warning` - 保留运动态基础 - 外环增加暖色警示张力 - 脉冲节奏更急 ## 第一阶段配置字段 入口: ```json "game": { "presentation": { "gpsMarker": {} } } ``` 新增字段: ```json { "animationProfile": "dynamic-runner" } ``` 说明: - `minimal` - 更轻、更克制 - 适合低配或保守活动风格 - `dynamic-runner` - 默认值 - 强调移动感 - `warning-reactive` - 更强调高压/危险张力 ## 运行时内部字段 这些字段不建议先暴露给活动配置,而是由运行时自动计算: - `motionState` - `motionIntensity` - `wakeStrength` - `warningGlowStrength` - `indicatorScale` - `logoScale` 这样可以保证: - 配置简单 - 逻辑稳定 - 真机调完后再决定哪些值得开放 ## 运行时判定建议 ### 运动状态 - `< 1.0 km/h`:`idle` - `1.0 ~ 6.8 km/h`:`moving` - `>= 6.8 km/h`:`fast-moving` ### 高压状态 参考现有 telemetry tone: - `yellow` - `orange` - `red` 其中: - `orange / red` 优先进入 `warning` - `yellow` 作为较轻的张力增强 ## 渲染拆分 ### WebGL 主体 负责: - 本体 - 外环 - 脉冲 - 尾迹 - 朝向三角 ### 2D 叠加层 负责: - logo 中心贴片 logo 不参与主几何动画,只跟随缩放强度和尺寸变化。 ## 性能策略 ### `standard` - 完整脉冲 - 完整尾迹 - 警示外环 ### `lite` - 减弱尾迹 - 降低 glow - 降低 warning 外环强度 - 保留最基本的移动/静止差异 ## 后续第二阶段 - logo 贴片本身的轻动画 - 事件动作 - 打点成功跳动 - 锁定开启反馈 - 高压进入反馈 - mascot/角色化 GPS 点 ## 结论 GPS 点动画不应该做成单一固定动画,而应该做成: **状态驱动的动态标记系统** 第一阶段先把: - `idle` - `moving` - `fast-moving` - `warning` 这 4 种状态的程序化动画跑通,再决定后续是否继续开放更细粒度配置。