关卡地图编辑器没有持久化

7 小时前综合
确认了。levels_cache 是 LevelManager 写入的发布关卡缓存文件,不是用户自建地图。 根因分析清楚了: ScanSavedMaps() 扫描 maps/*.json,会找到 levels_cache.json WASM 刷新后,levels_cache.json 可能在 LevelManager.Load() / CheckForUpdates() 时被重新写入(从 resource 或 cloud 加载),所以本地文件存在 #savedMaps  _ > 0(含 levels_cache),进入 elseif 分支
restoreMapsFromCloud() 从不被调用 — 云端恢复被跳过
用户的自建地图 + 绑定全部丢失
同时还有第二个问题:_bindings 也出现在已保存地图列表里(截图可见),说明 ScanSavedMaps 扫到了 maps/_bindings.json,它不是地图文件但被当成地图条目显示。

Bot Avatar
现在修复。有两个问题要解决:

问题 1:ScanSavedMaps 没有过滤 levels_cache 和 _bindings 这些非用户地图文件
问题 2:MapEditor.Create() 中云端恢复只在
#savedMaps  _ == 0 时触发,但 levels_cache 使条件永不成立

修复方案:

ScanSavedMaps 增加过滤列表,排除 levels_cache、_bindings 等非地图文件
Create() 中改用 cloudMapCache_ == nil 作为是否需要云恢复的条件——无论本地有没有文件,首次进入编辑器都应从云端拉取最新数据
现在修复 Create() 中的云恢复逻辑。核心问题:刷新后即使过滤了 levels_cache,cloudMapCache_ 仍为 nil(因为内存变量在刷新时清空),所以必须始终尝试从云端恢复,而不是只在本地为空时。
构建通过。总结这次修复的两个根因: 根因 1:ScanSavedMaps 没有过滤系统文件 maps/ 目录下有 levels_cache.json(发布关卡缓存)和 _bindings.json(绑定数据),它们不是用户自建地图,但被扫进了 savedMaps_ 列表。 表现:已保存地图列表里出现 levels_cache 和 _bindings 条目(截图中红框可见)。 修复:增加 SCAN_EXCLUDE 过滤表,ScanSavedMaps 在扫描本地文件和合并云端缓存时都跳过这些非地图条目。 根因 2:云端恢复只在 #savedMaps  _ == 0 时触发

WASM 刷新后:

LevelManager.Load() / CheckForUpdates() 会重建 maps/levels_cache.json
ScanSavedMaps() 扫到它 →
#savedMaps  _ > 0
代码走进 elseif
#savedMaps  _ > 0 分支 → restoreMapsFromCloud() 从不被调用
用户地图永远无法从云端恢复
修复:改为始终调用 restoreMapsFromCloud(),不再以 savedMaps_ 是否为空作为条件。同时保留立即加载本地自动存档的逻辑(如果本地有缓存可以先用),云端回调到达后再合并/刷新。
TapTap