fix: 修复批量缺陷并优化性能与交互体验

修复移动端摇杆输入失效问题,修正Rex摇杆的力值使用逻辑
重构输入互斥为计数模型,新增ui:opened事件解决纪念页穿透输入问题
修复引导箭头首帧闪现问题,设置初始透明度过渡
修复hasSave误判存档问题,新增合法景点id校验集
修复底图加载失败白屏问题,新增占位底图降级逻辑
移除无用的Phaser照片预加载,节省约65MB纹理显存
优化性能:缓存景点索引与解锁集合,跳过UI锁期间的世界更新
升级纪念页支持点击照片复用拍立得弹窗放大,新增照片降级
修复HUD指针事件不生效的CSS特异性问题
同步更新事件协议文档与输入锁模型说明
This commit is contained in:
guoxichao committed 2026-10-17 20:54:23 +08:00
1 parent a404e42ca8
commit b0467054c8
11 files changed
+254 -103

No files matched your search

+8 -2
View File
@@ -65,13 +65,19 @@ index.html
| 事件名 | 方向 | 载荷 | 语义 |
|---|---|---|---|
| `poi:reached` | Phaser → UI | `spot` 配置对象 | 玩家进入景点触发区,请求弹窗 |
| `ui:closed` | UI → Phaser | 无 | 弹窗/封面关闭,恢复游戏输入 |
| `poi:reached` | Phaser / UI → UI | `{ spot }` | 请求弹出景点拍立得弹窗(进入触发区,或纪念页点击照片) |
| `ui:opened` | UI → Phaser | 无 | 弹窗/纪念页显示,获取一层输入锁 |
| `ui:closed` | UI → Phaser | `{ spotId? }` | 关闭,释放一层输入锁;带 `spotId` 时触发该景点解锁与冷却 |
| `state:changed` | game-state → 两层 | 进度快照 | 解锁变化,刷新 HUD 与地图标记 |
| `game:complete` | game-state → UI | 进度快照 | 全部解锁,弹出纪念页 |
### 3.3 输入互斥(弹窗打开时)
**输入锁计数模型**:MapScene 维护 `uiLocks`,封面页初始持有 1 层;每个 UI 组件
(PhotoModal / CompleteOverlay)显示时 emit `ui:opened` 加锁、关闭时 emit `ui:closed`
解锁;计数归零才恢复游戏输入。这样纪念页与其上叠加的拍立得弹窗能各自持锁,
不会因先关闭其中一层就提前放行地图输入。
双保险:
1. DOM 层全屏遮罩拦截所有触摸/点击(`pointer-events: auto`)