下载 App
【#开发日记】从UI到内存的深度优化记录
5 小时前5 浏览
各位好,这是一篇开发日记,记录一下最近这段时间我们在底层做的几件事。
一、当前进度
项目已实装唐朝篇的核心系统:具名人物档案、师徒羁绊、天下学宫榜、季节轮转、情绪化UI、案头文书、科举三层、田产经营等。当前版本 v0.4.25,可完整试玩。
二、这段时间主要干了三件事
1. 把移动端交互重新做了一遍
之前积累了一批操作问题:命名界面点不动、键盘弹起后按钮被吞、刘海屏挡按钮、快速连点界面会剧烈抖动。逐一排查后发现原因各不相同:
· 命名界面是流程状态机漏了一个赋值,导致“下一步”点完只在原地重建。
· 键盘弹起时,按钮的点击事件被“点击空白收键盘”的逻辑抢先了。解决方案是让按钮在 pointer-down 阶段就执行,不等失焦流程。
· 刘海屏遮挡是因为安全区适配只改了固定按钮,没管临时浮层。现在所有浮层都挂到安全区容器内。
· 界面抖动是多个 UI 重建请求同帧打架,加上气泡尺寸不固定导致的。加了同帧合并、300ms 点击冷却、气泡固定尺寸,基本解决。
2. 修复了一系列深层 Bug
顺手挖出来好几个玩家不一定能碰到、但迟早会炸的问题:
· “光学钱”事件读档后数据损坏,选项数组变空。
· 行动结果面板队列没入档,读档后只能看到第一条。
· 榜单数据读取的是开局快照,和主界面不一致。
· 同帧多条提示互相覆盖,只剩最后一条显示。
· 天下学宫榜前三名奖牌独占一列,把生源列挤出了可视区。
· 新建存档后立刻读档,因为文件系统还没刷新,提示“空存档位”。
3. 拆代码 + 定位了一个引擎层的内存问题
main.lua 原来有1497行,拆成了5个模块(启动/会话/菜单/调度/入口),现在最大文件不到1200行,加载依赖无环。
然后做内存排查时发现一个硬骨头:反复重建界面,每次大约有100KB的堆增长。用二分法一层层排除,最后定位到是引擎UI库在渲染“短文本Label”时,每次实例化会累积约4.2KB的文本度量数据。长文本不触发,短文本触发。
这个属于引擎内部行为,项目层改不了。我们试过定宽、改对齐方式、包容器,全部无效。目前采取的缓解措施是:合并同帧重建、加点击冷却、去掉气泡过期后的无效重建,把重建次数压到最低。同时已把这个问题反馈给了引擎方。
三、后续计划
下一步做“校舍自由营造”,让玩家能亲手建造讲堂、斋舍、膳堂、藏书阁等设施,并实现设施之间的联动。
四、附
· 项目当前可试玩,包含完整的开局流程、回合推进、科举、事件和存档。
· 已产出五时代版本规划卷轴海报、UI重构对比图、人物档案卡及放榜弹窗截图。
感谢阅读,会继续更新。












