11.3 看板与告警
看板解决「该看什么」,告警解决「什么时候该被吵醒」。本节给出一份看板分区加告警规则配置,用种子化序列仿真告警:连续窗口触发、冷却去重、真阳性 / 假阳性 / 漏报判定,再跑 B 层基准看阈值浮动 10% 时触发次数会不会翻盘——把「告警定太松会漏、定太紧会吵」变成可比较的数字。
category
看板解决「该看什么」,告警解决「什么时候该被吵醒」。本节给出一份看板分区加告警规则配置,用种子化序列仿真告警:连续窗口触发、冷却去重、真阳性 / 假阳性 / 漏报判定,再跑 B 层基准看阈值浮动 10% 时触发次数会不会翻盘——把「告警定太松会漏、定太紧会吵」变成可比较的数字。
同一个「活跃」,产品、运营、投放三份报表给出三个数——这就是口径不统一。本节把埋点拆成事件名、参数类型与口径字典三件套,给出一份可被程序消费的埋点规范,以及一段逐条比对的 S 层校验脚本:事件名是否已知、必填参数是否齐全、类型是否匹配、enum 取值是否合法,并交叉核对 11.1 指标树每个叶子是否都有口径。
把「有效活跃」定为北极星,向下拆成留存 / 变现 / 增长 / 体验四条驱动、十二条叶子指标,每条边带权重,同层权重和必须为 1000。本节给出一张可被程序消费的指标树配置、一段做一致性校验与加权回算的 S 层脚本,以及一套与 Python 逐位一致的 TS 求值内核,让「北极星现在多少分」从口号变成能跑出来的数字。
把防沉迷做成三条可配置的硬规则:时段(可玩日与时间窗)、时长(每日上限内截断发放)、消费(单次与月度上限分别拦截)。一条带年龄段的 D 层档案表、一段逐次判定十次登录与消费尝试的 S 层结算脚本,以及一份运行时同款的 P 层闸门内核与六条断言。
把内容安全做成可配置的分级处置:一条带类别、等级与词库的 D 层红线规则表,一段对文案、游戏名、活动标题做命中扫描并给出 pass / review / block 三档处置的 S 层脚本,以及一份运行时同款的 P 层过滤内核与六条断言,让「拦截还是人工复核」由规则而非心情决定。
把上线前的资质、备案与平台类目要求整理成一张可被程序读进来做覆盖率与 schema 校验的清单:一条带阶段、等级与类别字段的 D 层资质配置,一段按「已持有集合」计算必办清单覆盖率并校验备案项字段的 S 层对照脚本,以及开发期 / 提审前 / 上线后三阶段的覆盖率与字段残缺对照。所有条目均为示例,具体结论须专业法务判断。
《合成小岛》的广告频次不是越高越好。自愿广告(激励视频)单次收益高、对留存的惩罚低,强制广告(插屏)单次收益低、惩罚高;本节把两类广告的日均次数放进一张二维网格,用一段 S 层脚本扫出 60 天净 LTV 最大的频次组合,再用一段 B 层基准把两个惩罚系数各扰动 ±30%,看最优组合会不会漂移——结论是「最优自愿次数落在中间,强制广告应尽量少放」。
《合成小岛》的广告收益不是「eCPM 越高越好」:底价压低则填充率高但单价低,底价抬高则单价高但填充率低,收益是填充率与 eCPM 的乘积,必有一个内部最大值。本节给出一张 D 层底价档位表、一段扫描六个档位找最优的 S 层脚本,以及一个用两个滑杆实时拖动每日上限、观察展示数、当日收益、留存乘数与净收益代理如何联动的单文件 HTML 原型(W 层),并用 Playwright 无头断言它可复现。
《合成小岛》靠广告变现的第一步,是把「广告」拆成激励视频、插屏、横幅、原生四种可配置形态,再安放到离线收益翻倍、失败复活、合成双倍、日常任务、关卡结算、主界面、商城七个场景。本节给出一张 D 层形态与场景配置表、一段按「触发次数 × 填充率 × eCPM」估算各场景日均收益的 S 层脚本,以及一套按 optIn、每日上限、冷却三条规则判定放行的 P 层广告闸门内核。
《小游戏开发实战》卷三《上线、变现与长线运营》全书目录与阅读路径:16 章 48 节,覆盖广告形态与收益模型、内购与混合变现、收入拆解与 LTV 回本、定价促销、买量与素材、自然增长、留存召回、数据实验、提审发布、合规红线、指标树、活动赛季、版本节奏、案例复盘与三卷收官,每节都配可跑的 Python 仿真、TypeScript 内核或单文件 HTML 原型。
《小游戏开发实战》卷二《引擎、实现与体验打磨》的复现索引:按 16 章列出 pebble/ 下全部 config / sim / core / web 文件,写清卷二工具链的 e<章号>_ 前缀约定(与卷一的 ch 前缀区分,避免 node --test 通配符交叉匹配)、环境速查与六层可运行性口径(S/P/W/D/X/B)的逐层复现命令,以及一键复现与排错顺序。
对象池解决「少分配」,但弱机的内存与帧耗时本身就不够用。这一节把弱机识别做成整数判据:按可用内存、帧耗时 P95、CPU 核心数把设备分成 high/mid/low 三档,每档给出粒子数、渲染分辨率千分比、动效开关与目标帧率,并支持运行时主动降一档。
把「每帧新建对象」与「对象池零分配」放进同一个分配量级的解析模型:跑 10 分钟,算出分配总量与 GC 触发次数,再用 B 层扫描每帧分配数到 GC 触发间隔。全程显式声明这是模型而非 V8 实测,数字只在同一套假设下可比,用来判断分配密度是否危险。
小游戏里每帧新建对象会把垃圾回收压力堆到帧预算上。这一节用 TypeScript 写一个定容对象池:acquire 借出时清零状态、release 归还进空闲表,容量耗尽按拒绝、覆盖最旧、扩容到上限三种策略处理,并统计命中率与峰值占用,让「复用是否真的发生」变成可断言的事。
前两节把存档存好、迁好了,这一节问一个更尖锐的问题:存档被玩家改了怎么办。给出客户端能做的四类校验——数值上限、时间间隔下界、增量单调性、离线收益封顶,再用 S 层脚本模拟八种作弊模式,看清本地校验能拦住哪些、漏掉哪些,以及为什么权威必须放服务端。
上一节把存档存进了抽象层,这一节解决更难的一半:玩家设备上躺着的旧存档,格式变了怎么办。用 v1→v2→v3 的迁移链演示三类改动——字段新增默认值、字段重命名、类型收紧,配可跑测试断言旧存档能升到最新且不丢数据、迁移幂等、未知版本明确失败,并用 S 层脚本对照迁移前后的体积与耗时。
小游戏要在浏览器与多个小游戏宿主上跑,存储能力各不相同:有的无上限,有的只有几 MB 且会静默丢写。本节给出一层可断言的 KV 抽象——内存、限额、降级到最小存档三种实现,容量按整数字节记账、超限按优先级淘汰,云存档只按整数版本号对账取新者。
把「落地弹得对不对」变成四个整数参数:重力增量、速度阻尼比、落地弹性比、静止阈值。用固定步长的整数物理内核实现下落与弹跳,再用单文件 HTML 原型配 Playwright 无头,先注入固定帧数步进、再走一遍真实 rAF 下落,断言落点、弹跳次数与静止判定并截图。
动手写 t1/t2 两级里最核心的碰撞内核:AABB 与圆相交(整数平方距离比较,无开方)、按网格做的 3x3 邻域 broad phase,并用可播种 LCG 撒点,对照暴力 O(n^2) 与网格的候选对数随实体数增长,产 CSV 与 SVG。
把「小游戏要不要上物理引擎」变成可核算的分级问题:把玩法类型映射到所需物理能力,再折算成代码行数、实现工时与包体占用,用 S 层脚本逐层汇总五个层级,讲清《合成小岛》为什么只需最轻的一级、多上一级要付多少代价,以及分级为何要按能力增量补齐而非整体升级。