DEVLOG // #12 // 2026-09-18

UI 终端化完成

开发日志UI / 系统阅读约 4 分钟

全部交互界面已改写为终端风格。至此,"玩家看到的每一个字都来自一台正在记录你的机器" 这条原则,从标题页一直贯通到设置页。

为什么要做这件事

最初的界面是 Ren'Py 默认模板改的:圆角按钮、居中排布、柔和阴影。功能上没问题, 但它传达的东西是错的 —— 它看起来像一个"游戏菜单",而《月蚀症》里玩家操作的 应该是一台档案终端。你在里面的每一次点击,都是向某个系统提交一次查询。

所以这一版把菜单项重做成了"账目行":实色底、左侧竖条、两位索引、等宽标签, 右上角一枚 REC 红点表示"终端正在等待这条指令"。所有元素由 Solid 直接绘制, 不依赖任何贴图 —— 这带来一个额外好处:任意分辨率下都不会糊。

这一轮踩到的坑

  1. 悬停动效"看起来没生效"。排查了很久才定位到:Ren'Py 在屏幕重算时会把 旧 transform 的 ATL 时钟锚点继承给新 transform,导致整段插值在第一帧就已经 "播到终点"。表现就是鼠标移上去,元素瞬间跳到终值,完全没有过渡。 最后改用函数驱动的 Transform 自己按挂钟插值,绕开了这套继承机制。
  2. 方括号开关没有选中态。设置页的开关是用 [ ] / [×] 表示的,但两组方括号的宽度不一致,勾选后整行会轻微位移。改成固定宽度的等宽字符后解决。
  3. 序号与项名重叠。序号原本用 fixed 层叠定位,一旦项名换行就压在一起。 改成横排即可,不需要任何定位技巧 —— 早该这么做。

现在的状态

UI_TERMINAL       [ OK ]  终端化完成
UI_MOTION         [ OK ]  悬停/入场动效
UI_PREFS          [ OK ]  设置页(含确认弹窗)
UI_CRT            [ OK ]  全局 CRT 层
UI_TRANSITION     [ ?? ]  转场体系仍在调

接下来轮到转场。方向已经定了:不做花哨的推拉,而是模拟信号切换 —— 画面先短暂失同步,再重新锁定。

如果你打开设置页发现某一行对不齐,那不是彩蛋,是我的 bug。欢迎来骂。 —— 制作组
← 上一篇:开发日志 #11 全部动态