5.3 暂停、切后台与恢复
暂停容易,恢复难:切后台十分钟再回来,若把十分钟按固定步长如实补回,一帧要跑三万七千步,设备直接卡死。本节用封顶补偿把离线时长折算成有上限的固定步数,并把整条「暂停 → 切后台 → 恢复」路径放进单文件 HTML 原型,用 Playwright 无头断言加截图验收。
tag
暂停容易,恢复难:切后台十分钟再回来,若把十分钟按固定步长如实补回,一帧要跑三万七千步,设备直接卡死。本节用封顶补偿把离线时长折算成有上限的固定步数,并把整条「暂停 → 切后台 → 恢复」路径放进单文件 HTML 原型,用 Playwright 无头断言加截图验收。
把设计分辨率到各种真实屏幕的映射拆成可算的整数像素:用千分比整数表达 fit/fill 缩放,算出内容区与居中偏移,再与刘海/圆角/指示条的安全区求交,四台设备逐档断言,并给出可切换设备与缩放模式的单文件 HTML 原型与 Playwright 无头验收脚本。
把「小游戏没有 DOM」这件平台约束落成可运行的工程抽象:用一份不依赖任何引擎的最小 2D 绘制内核,把清屏/矩形/文本三类指令发到两个宿主——Node 里的整数像素缓冲与浏览器里的真实 Canvas,逐像素断言两边画出的非背景像素数一致、指纹稳定,并附可打开的单文件 HTML 原型与无头验证脚本。
渐进式教学按连续失败次数把提示抬到三档,卡住不动时自动给提示,容错侧再给一个有限深度的撤销栈让误操作原路撤回;P 层内核加单测保证状态迁移,W 层单文件 HTML 原型用 Playwright 无头驱动,断言「连续失败→提示升级」与「误操作→撤销」并截图。
音效与震动是同一个反馈模型的另外两个通道:用一张分级表把「事件 → 音效 → 震动档位 → 是否可关」写死,再用内核处理静音、震动开关、宿主能力探测与同一事件连点的频控,最后用可播种仿真统计一次会话的反馈预算、画出震动分级分布图供策划评估手感。
把「打击感」拆成可量化的三要素:屏幕震动(幅度按几何比衰减、方向交替)、命中停顿帧、缩放脉冲。三者全用整数、无随机,同一权重与同一时刻必得同一结果,最后用单文件 HTML 原型配 Playwright 断言「命中→震动→衰减到静止」的完整数值序列。
把手感拆成可计算的缓动曲线与时间轴:用整数定点实现线性、二次、三次、回弹、弹性五种缓动(进度取千分比、避开浮点),再搭一个支持并行串行、延迟、打断与 onComplete 的时间轴调度器,最后用单文件 HTML 原型配 Playwright 无头推进时间、采样动画值。
把 UI 性能拆成可算的整数:元素按「纹理 + 材质」合并绘制调用,作者顺序里相邻元素键不同就打断合批;给出收益模型脚本、CSV 与 SVG,再用 B 基准扫元素数看 UI 帧占比在哪一档越过预算——同一份配置跑 Python 仿真,数字全来自本机实跑。
把弹窗从「随手 new 一个框」升级成可算的弹窗栈:按层级压栈、同去重键拒绝重复、超时自动关闭、模态遮罩拦截点击穿透、点遮罩只关最上层模态——配可跑内核、单文件 HTML 原型与 Playwright 无头验收,全程整数毫秒、可确定性回放,无需真实时钟。
把 UI 布局拆成可算的整数像素:锚点(左右上下与拉伸)+ 偏移 + 边距递归求每个节点的最终矩形,用层级决定绘制顺序与遮挡,用点命中判断谁在最上面,再用虚拟滚动只实例化可视区间——配可跑内核、单文件 HTML 原型与 Playwright 无头验收。
《小游戏开发实战》卷二《引擎、实现与体验打磨》全书目录与阅读路径:16 章 48 节,覆盖引擎选型评分、工程骨架与构建管线、渲染适配、资源管线、游戏循环与状态机、输入交互、物理碰撞、存档反作弊、对象池内存、平台能力适配层、UI、动效、新手引导、性能优化、测试与工程化,每节都配可跑的 Python 仿真、TypeScript 内核或单文件 HTML 原型。
《小游戏开发实战》卷二《引擎、实现与体验打磨》全 50 篇。第一部分(第 1–4 章)讲引擎与框架选型的加权评分、工程骨架与分包构建管线、无 DOM 的 Canvas 渲染与多分辨率适配、图集与音频资源管线;第二部分(第 5–10 章)讲固定步长循环与确定性、输入交互、物理碰撞、存档与反作弊、对象池与内存、平台能力适配层;第三部分(第 11–16 章)讲 UI 系统、动效与打击感、新手引导、性能优化、测试与工程化。每一节都配可跑的 Python 仿真、TypeScript 内核或单文件 HTML 原型,围绕虚构小游戏《合成小岛》与贯穿工具链 pebble 展开。
用 Clojure 构建桌面应用:cljfx 的声明式 UI 与状态驱动模型、JavaFX 控件与布局、fx/sub-val 响应式订阅、事件处理与副作用、CSS 样式、打包为原生安装包与 GraalVM native image 的可行性分析。
深色模式不只是把背景改黑。本文讲透小程序深色模式的三层适配机制(theme.json、app.json darkmode、CSS 变量)、语义化设计令牌的构建方法、运行时主题切换与持久化策略,以及图片、图标、第三方组件和 WebView 内嵌页的适配盲区与验收清单。
系统讲清 Defold 移动端适配:渲染投影的三种策略、GUI 节点的锚点与缩放模式、显示配置与横竖屏布局切换、安全区与刘海屏处理(window.get_safe_area 与 gui.set_safe_area_mode)、触屏输入、高 DPI 与子像素、真机调试与常见坑。
深入游戏 UI/HUD 系统核心:屏幕空间(Screen Space / World Space / Overlay)、UI 布局与九宫格、数据绑定与模型-视图、HUD 元素生命周期、UI 渲染与性能(重建/合批/遮罩),以 Unity UGUI/UI Toolkit、Godot Control 与自研 UI 框架三重视角对照剖析。
深入 Defold GUI 系统:GUI 节点体系、文本字体与图集、自适应布局与锚点、动画特效,以及 HUD、菜单与弹窗的完整实现方法。
Flutter 表单体系深度实践:Form 与 TextFormField 的字段管理与验证机制、Validator 与自动验证触发时机、输入格式化(FilteringTextInputFormatter 与掩码)、焦点与键盘处理、复杂表单状态管理,以及登录/注册等实用表单完整案例。
任务系统的复杂度经常被低估。任务逻辑可能在服务端或数据层已经很清楚,但玩家真正感受到的是 UI:右侧追踪是否及时更新,完成弹窗是否出现,领奖按钮是否可点,切场景回来后当前选中的任务还在不在。只要 UI 状态丢一次,玩家就会觉得任务系统“不可靠”。
一个个人经营游戏在面板脚本直连、MVC、MVVM 和事件驱动 UI 之间做技术选型的案例,详细讨论库存、状态刷新、弹窗、测试和维护成本。