每次需要点击一下才显示正确地图名
昨天 11:131 浏览综合
根本原因清楚了:
CloudLoadMapIndex 加载的是 文件名列表(map_index key),不包含地图名称
s_.mapDisplayNames[filename] 只有在 LoadMap 或 CloudLoadMap(实际加载地图数据时)才被写入
列表里从云端索引来的 map_0509_101656 从未被加载过,所以 mapDisplayNames 里没有它的名字
修复方案:CloudLoadMapIndex 加载完索引后,同时从每个 map_{filename} key 里读 name 字段(不需要加载整张地图数据)。但这会产生 N 个网络请求,代价太高。
更轻量的方案:在云端索引里同时存储 name,格式从 ["fname1","fname2"] 改为 [{id="fname1",name="小肠地图"},...],同时保持向后兼容。
现在完全清楚了。最轻量的修复:将 map_index 的格式从纯文件名数组改为 {id, name} 对象数组,CloudUpdateIndex 同时写 name,CloudLoadMapIndex 加载时顺便填充 mapDisplayNames,完全兼容旧格式(旧条目是字符串时降级处理)。
同时本地扫描时也要补充 displayName(读每个本地 JSON 的 name 字段)。
构建通过。
根本原因:map_index 云端索引只存文件名字符串,不含地图名称。ScanSavedMaps 扫描本地文件时也不读内容,所以从未加载过的地图在列表里只能显示 map_0509_101656 这样的文件名。
修改内容(MapEditorPersistence.lua):
位置 改动
CloudUpdateIndex 索引格式从 ["fname"] 升级为 [{id, name}],每次保存/改名时更新 name;兼容旧格式(字符串条目自动迁移)
CloudLoadMapIndex 解析新格式,加载索引同时填充 s_.mapDisplayNames;旧字符串格式降级处理
ScanSavedMaps 本地扫描时,对 mapDisplayNames 里没有记录的地图,顺手读 JSON 里的 name 字段填充
效果:进入编辑器后,所有地图在列表里直接显示正确名称(“小肠地图”、“口腔地图”),无需先点击加载一次。改名后下次进入也立即反映。
问题根源:刷新后本地 FS 为空(内存 FS 不持久),ScanSavedMaps 读不到本地文件。云端 map_index 是旧格式(纯字符串数组),没有 name 字段,所以我的新代码也没法填充 displayName。
需要做一次性迁移:加载旧格式索引时,并发拉取每个地图的 name 字段,然后刷新列表并将索引升级为新格式(之后就不需要再拉了)。
修复逻辑:
进入编辑器
↓
CloudLoadMapIndex 加载 map_index
├── 新格式 {id, name} → 直接填充 mapDisplayNames,列表立即显示正确名称
└── 旧格式 ["map_0509_..."] → 并发拉取每个 map_{fname} 的完整数据取 name
↓ 全部完成后
onRefresh_() 刷新侧边栏(名称显示正确)
升级写回 map_index 为新格式
↓ 下次进入
直接走新格式路径,不再有额外请求
首次进入会有 N 个并发请求(拉各地图数据取 name),完成后列表自动刷新。之后每次进入索引已是新格式,名称随索引直接加载,无额外开销。




