下载 App
开发日志3:能跑的游戏,和正确的游戏
修改于前天 15:0343 浏览综合
一、第二篇日志之后
写完上一篇日志,我以为接下来就是"填内容"——把 30 关关卡数据录进去,把元素分好阶,跑通流程,上线。
事实是,我花了大量时间在"排查看不见的 bug"上。
这一类 bug 的共同点是:代码不报错、画面正常、游戏能跑,但玩法是错的。 它们不像崩溃那样刺眼,甚至不会让你立刻发现,只会让你在某个时刻觉得"为什么手感不太对"。
这篇日志讲三个这样的 bug,和我为此搭的工具链。
二、第一个坑:配方写了,但永远查不到
某天我录四阶词的时候,测试"云 + 水 = 雨"这条配方。
产出的是「gen7」——一个随机拼接的垃圾词,不是「雨」。
一开始我以为是自己写错了形状或者颜色。查了一圈配方表,["cloud+water"] = {...} 明明白白写着。
然后我的搭档 AI 查了另一条路径:Config.Resolve 查表用的是"排序后的 id 拼接"。
排序规则是字母序。"cloud" < "water" 成立,所以 cloud+water 是对的——但当配方表里写的不是这个顺序时,查表就永远查不到。
排查之后发现,游戏里已经有 6 条配方是死的。 包括「泉」——它的配方写成了 ["steam+earth"],而查表用的是 "earth+steam"。
「泉」是这个游戏里一个中间节点词,它还是「溪」和「温泉」两条四阶配方的前置。也就是说,如果不是这次排查,录完四阶之后,会有一整条链悄悄失效。
三、第二个坑:蒸汽和云,在系统眼里是同一个词
第二个 bug 更隐蔽。
第五关的目标是「云」。我投火 + 水,产出「蒸汽」。游戏立刻判定:"达成!"
但蒸汽不是云。
排查后发现:目标匹配用的是"属性近似",不是"词 id 相等"——因为玩家的实际合成路径可能产生"等价词"(比如通过连锁吞噬,得到属性相同但名字不同的词),所以匹配要宽容一点。
宽容的实现方式是颜色量化——把 RGB 每通道除以 64 再取整。200 和 235 除以 64 都是 3,算同一个颜色。
蒸汽和云恰好落进了同一个桶。
它们的形状都是 cloud、行为都是 rise、优先级都是 2,颜色又都量化到了 (192,192,192)。系统完全没法区分它们。
这个 bug 是双向的:第五关里蒸汽算云;反过来,第一关(目标是蒸汽)里做出云也算通关。只是玩家不会那样操作,所以一直没暴露。
修法是把量化步长从 64 调到 16。但调之前,我让 AI 全表扫描了一遍——发现除了蒸汽/云,还有另外两组词也撞了,只是还没被触发(土/泥、沙尘/沙暴)。
如果只修蒸汽/云,剩下两组会在后续关卡里静默触发同样的错误。
四、第三个坑:跨设备难度不一样
第三个 bug 是最近才发现的,它是"承诺了但没有兑现"的类型。
设计上是 9:16 竖屏舞台 + 两侧黑边,理由是"所有设备游戏区域比例一致,否则会改变关卡难度"。
但审查发现,这个承诺没生效。
在竖屏手机上,屏幕本身比 9:16 更窄,所以代码走的是"铺满"分支,不是"加黑边"分支。结果:
iPhone 14 上,世界区域是 0.616 的宽高比
iPad 上,世界区域是 0.750
同一份代码,两个设备的世界比例差 25%。
更糟的是速度不缩放。 水的速度是 90 像素/秒,是绝对逻辑像素。在 390 宽的世界里,水横穿要 4.3 秒;在 768 宽的世界里,要 8.5 秒。
iPad 上玩家的反应时间是手机的两倍,难度完全不同。
修法是把所有速度乘以 worldW / 390。这个改动的关键技巧是"只改 dt 一处"——因为所有时间量(速度、摆动频率、膨胀速率)都走 dt,所以不需要逐个改常量,也不会漏。
改完之后实测:320 / 390 / 576 / 768 宽的世界,水横穿时间全部是 4.33 秒。
五、工具链:五个脚本
上面这三个 bug,没有一个能靠肉眼发现。它们都不会让游戏崩溃,只在某个角落悄悄改变行为。
所以我搭了一套工具。每次改词表或关卡数据,先跑工具再验证玩法。
工具 抓什么
check_recipe_keys.lua 配方键拼写(数据存在但永远查不到)
scan_collisions.lua 匹配键碰撞(视觉不同但算同一个目标)
scan_targets.lua 目标候选数 + 难度深度分布
scan_level_costs.lua 关卡的最少投放次数(步数上限够不够)
scan_collisions.lua(扩展) 跨设备尺寸 + 触控目标下限
它们有一个共同特征:直接用 headless runtime 加载真实的 config.lua,而不是正则解析代码。
这样扫描结果永远不会因为"解析脚本和实际代码不一致"而漂移——工具读的是游戏真正在用的数据。
六、现在有什么
45 个词,覆盖一阶到五阶
30 个关卡,从"蒸汽"到"台风",深度逐级推进
9 种具象形状(火焰、水滴、云朵、波浪、双峰、土块、螺旋……)
元素解锁(火/水/风初始,第 10 关解锁土)
跨设备一致的难度(归一化已生效)
五个数据校验工具
版本 1.0.4 已构建,正准备真机测试










