下载 App

《变成黑洞》开发日志

10/227 浏览综合

日期:2026-10-22 代码规模:13821 行 / 20 个文件(RenderEvolutionGiant.lua 920 → 954)
horizontal linehorizontal line

一、本期主线:把「能跑通」变成「说得清」

上一期把重复实现收敛掉了。这一期暴露的是另一类问题: 代码能跑,但跑出来的东西经不起一句追问。
  • 每阶都是 20 口 —— 「碎石和红巨星凭什么一个节奏?」
  • 黑洞吃 2000 口只长 4% —— 「那通关是怎么通的?」
  • 黑洞明明显示 160 口满,却要 277 口才通关 —— 「那 117 口去哪了?」
三个问题都是同一类:没有实测,只有推理。这期的做法是先把数字测出来,再改。
horizontal linehorizontal line

二、冰巨星极光:把「线」换成「光」

用户原话:「冰巨星的特效那是什么呀,说了不要用线啊。」
查下来是三处描边:
位置原实现视觉效果
极光帘幕2 侧 × 7 根 nvgStroke14 根硬线,像雷达图
霜壳包裹Core.LightBand内部是 5 圈同心圆描边
残留霜辉同上同上

极光帘幕 → 渐隐光幕

真实极光是面状发光体,不是线。改为填充四边形:
lua
-- 沿自身方向渐变(青白 → 全透明) local grF = nvgLinearGradient(nvg, fx, fy, ex, ey, nvgRGBA(190, 250, 255, math.floor(fa * 0.95)), nvgRGBA(120, 200, 255, 0)) -- 宽度从根部到顶端收窄到 16% local halfW0 = baseR * (0.030 + fw * 0.038) * (1 - ft * 0.45) local halfW1 = halfW0 * 0.16
从 7 根增到 9 道,填充之间互相叠合,配合 NVG_LIGHTER 自然融成一片。

顺手补的光晕底层

原来极光柱边缘太干净,像贴上去的色块。加一层宽度 2 倍、亮度 26% 的渐变垫底。

霜壳 → Fx.SoftRing

新写的纯填充环形辉光原语(RenderAnimFx.lua:130):
lua
-- 内半边 [r-halfW, r]:透明 → 中线 nvgCircle(nvg, cx, cy, r) nvgCircle(nvg, cx, cy, r - halfW) nvgPathWinding(nvg, NVG_HOLE) -- 挖洞 nvgFillPaint(nvg, nvgRadialGradient(...)) -- 外半边 [r, r+halfW]:中线 → 透明,同理
两半环各用放射渐变填充,中线最亮、内外缘透明。 视觉上还是柔光带,但零 nvgStroke。
结果:第 8 阶动画里 nvgStroke 出现次数 = 0。
horizontal linehorizontal line

三、进化口数:从「一刀切 20」到按阶段分级

先测基线

写了个 headless 驱动的测量脚本(追最近可吃目标,模拟会主动觅食的玩家):
第 2 阶 陨石       20 口   6s
第 3 阶 小行星     20 口   5s
...
第 12 阶 黑洞      20 口   4s
合计 220 口 · 45 秒通关
问题很清楚:从 12 质量的碎石到 310 半径的红巨星, 量级跨了几十个数量级,节奏却是同一条直线。

新口数表

阶进化口数设计意图
1碎石→陨石20开局 6 秒内看到第一次进化
2陨石→小行星27
3小行星→原行星34
4原行星→矮行星42进入"真天体",节奏开始放缓
5矮行星→类地50
6类地→冰巨星58
7冰巨星→气巨66
8气巨→恒星74
9恒星→红巨星82
10红巨星→中子星90
11中子星→黑洞95致密星:小而极强,蓄势到位
12黑洞→通关160终局加倍
合计798
实现上从单值改成查表:
lua
EatsPerStageList = { 20, 27, 34, 42, 50, 58, 66, 74, 82, 90, 95, 160 }, EatsPerStage = 20, -- 兜底(表外阶段用) function Config.EatsForStage(stage) -- 越界/缺项时回落
调用点收敛为两处:Game.CheckEvolution(判定)和 main.UpdateHUD(进度条)。
horizontal linehorizontal line

四、黑洞永远打不通

这是本期最严重的问题,而且一直在线上。

发现

原判定只在前 11 阶有效:
lua
if idx < #Config.Stages then local need = Collision.Threshold(idx + 1) * 1.0001 if p.mass < need then p.mass = need end -- 补齐到下一阶 ... end
黑洞是最后一阶,idx + 1 不存在 —— 整段什么都不做。 黑洞只能靠吃碎石带来的真实质量增长。
实测 210 秒吃了 2000 口:
时间半径质量
t=40s114.81.19e+08
t=210s119.91.36e+08
2000 口只长了 4%。 按这个速度长到 r=10000 需要 6 小时。 也就是说:玩家打到黑洞,游戏就再也结束不了了。

修复

改为「每吃一口按几何比例膨胀」:
lua
local p01 = eaten / eatsPer local wantR = baseR * (targetR / baseR) ^ p01
从 114.8 平滑撑到 10000,160 口走完。 不用「满 160 口一次性跳到通关线」,是因为那样「吞掉宇宙」会变成一次瞬移 —— 玩家要能看见黑洞一口口撑大。
horizontal linehorizontal line

五、两个让口数失真的 bug

修完第四节,实测仍要 277 口。继续查。

1. 浮点误差卡在通关线上

Collision.Sync 会从质量反算半径:
lua
p.mass = Collision.MassFromRadius(wantR, p.stage) Collision.Sync(p) -- 内部再算回来
往返换算后 10000 变成 9999.99999, 差一点点够不到 p.r >= worldR * VictoryRadiusRatio 的判定。 黑洞卡在线上反复吃,多花了 108 口。
修复:满口数时直接把半径对齐到目标值(并同步 collisionR)。

2. 一帧吃多口,统计越界

黑洞半径巨大,一帧内会同时接触十几颗碎石, stageEats 一次跨过 160,继续累加到 235、320。
修复:stageEats 超过目标口数即钳为满。
修复前:VICTORY se=320
修复后:VICTORY se=160  r=10000.0
horizontal linehorizontal line

六、食物密度:从「满屏」到「够用」

用户反馈「食物密度太高了要正常一点」。
先测,不猜。写探针统计视野矩形内的天体数:
t=5s    inView=136
t=30s   inView=124
t=60s   inView=199
视野里塞了 120~199 块碎石。

调整

参数原值新值
NaturalMax450200
InitialCount450200
MaxVisibleMass900000400000
SpawnInterval0.15s0.20s
补充频率跟着放缓:总量减半后不需要那么勤,约 5 块/秒仍能跟上消耗。

结果

t=5s    inView=67
t=30s   inView=58
t=60s   inView=46
稳定在 45~67 块。

副作用(可接受)

进化节奏本身没变(每阶口数逐一核对无差异),但总时长从 106s 涨到 149s —— 碎石稀了,每口之间找目标更慢。这是降低密度的自然结果。
horizontal linehorizontal line

七、本期的做法变化

前几期是「发现问题 → 推理原因 → 改代码」。 这期改成「先测,再改」,因为推理在这三件事上都失效了:
问题推理会得出的结论实测真相
黑洞打不通「质量门槛公式有问题」黑洞分支根本不存在
黑洞要多花口数「几何膨胀公式算错了」浮点误差 + 一帧多口
食物太密「调小 SpawnInterval」是 NaturalMax 太高
测量脚本都留在 .tmp/(evolve_pace.py / bh_t3.py / food_density.py), 后续调数值可以直接复用。
horizontal linehorizontal line

八、验证

  • 12 阶口数逐阶核对:20/27/34/42/50/58/66/74/82/90/95/160,与配置一致
  • 黑洞通关:se=160 r=10000.0 mode=victory,不再超额
  • 视野食物:45~67 块(原 120~199)
  • 第 8 阶动画 nvgStroke 出现次数:0
  • LSP 全程 0 Error
  • 构建通过
horizontal linehorizontal line

九、已知边界

  • 黑洞 160 口里,前期每口膨胀幅度小(前 20 口 r 只到 206), 视觉反馈偏弱;后期才开始明显变大。可考虑改成前快后慢的曲线。
  • 食物密度降到 200 后,AI 通关要 149s;真人停停看看,估计 6~7 分钟一局。 若嫌长,优先调 SpawnInterval 而不是 NaturalMax(后者影响观感)。
  • 手机实机帧率仍未测。
《刀光剑影》开发者日志截图
《刀光剑影》开发者日志
手机端布局返工、输入方案收敛,和一次 7420 条报错的排查 本期进展 抽牌三选一在手机上溢出屏幕 用户反馈:横屏手机上三张牌显示不全,必须上下翻动才能看全。 排查发现根因是布局判定写反了: lua 复制 -- 修改前:按可用【宽度】判定窄屏 return graphics:GetWidth() / scale - insets.left - insets.right - 80 < 810 横屏手
官方
已通关,放心玩截图
已通关,放心玩
官方
1 赞
《变成黑洞》开发日志
为玩家推翻重来设计新玩法,导致游戏全是bug, ai都不听话的那种。以后我慢慢修吧。当前版本可能是最后的版本了。已经将tap tap创造已经开发到极致了。 一、本期主线:一次撞击被当成了无数次 这一期所有问题都指向同一件事: Impact 被反复调用。 Contact 每帧处理一次接触,但接触记录会被距离判定清掉重建。撞击后两块球贴合在一起(位置重叠、速度相同),PruneContacts 每隔几
官方
2 赞
《变成黑洞》开发日志第 1 期截图
《变成黑洞》开发日志第 1 期
项目:变成黑洞 引擎:UrhoX 类型:宇宙题材吞噬进化(街机) 第 1 期 · 项目起步与核心玩法 日期:2026-09-18 当日构建次数:19 次 本期进展 完成了项目从零到「能玩」的全过程,核心是一个宇宙版的「大鱼吃小鱼」:玩家从一块碎石开始,靠吞噬比自己小的天体不断成长。 定下 9 阶进化链 一开始的进化链设计得比较粗,只有 9 阶: 星尘 → 碎石 → 陨石 → 小行星 → 矮行星#聚光灯GameJam开发者日志
官方
2 赞
《变成黑洞》开发日志第 5 期 · 补全真实天体演化链与黑洞重做截图
《变成黑洞》开发日志第 5 期 · 补全真实天体演化链与黑洞重做
日期:2026-10-02 当日构建次数:5 次 本期进展 这一期主要做了一件事:把「碎石 → 黑洞」这条链上的物理缺失补上。 之前有玩家在评论区问「黑洞是怎么来的」,我回头查了一遍天体物理资料,发现游戏的进化链在科学上站不住脚。于是做了一次系统性修正。 1. 补上中子星,进化链扩展到 14 阶 问题:真实演化里,红巨星之后应该是白矮星 / 中子星 / 黑洞三选一,取决于坍缩后的核心质量。之前红巨
官方
1 赞
《变成黑洞》开发日志第 4 期 · 3D 自转、进化链扩展与撞击反馈截图
《变成黑洞》开发日志第 4 期 · 3D 自转、进化链扩展与撞击反馈
日期:2026-09-27 ~ 2026-09-29 构建次数:7 次(09-27)+ 11 次(09-29) 本期进展 1. 真 3D 自转(09-27) 有玩家反馈「天体看起来像圆盘在转,不像球体」。 问题在于原来只是平面贴图旋转:贴图在圆内转圈,看起来就是一张纸在转。 重写后的做法是把表面特征(陨石坑、大陆、云团)建在单位球上: 出生时在单位球面撒 N 个特征点 每帧按自转角绕自转轴旋转 再
官方
2 赞
4 回复
《变成黑洞》开发日志第 3 期 · 物理真实化起步
日期:2026-09-21 ~ 2026-09-26 构建次数:3 次(09-21)+ 3 次(09-26) 本期进展 激励视频广告(09-21) 接入了「看广告复活」:玩家死亡后可看广告原地复活。 广告代码的关键设计是以回调的 result.success 作为唯一发奖依据,同步拒绝、异步回调、超时看门狗共享同一个「一次性完成」状态,避免重复发奖。 纯引力模式(09-26) 这是本期最大的改动,
官方
2 赞
《变成黑洞》经费已至,敬请期待
日期:2026-10-17 ~ 2026-10-18 本期构建序号:19 → 56(共 38 次构建) 代码规模:8469 行 / 14 个文件 一、本期进展 这一期的主线只有一件事:把「视野」这件事从头重做一遍。 围绕它牵出了一连串问题——阶段错乱、渲染预算、特效不跟随、性能卡顿。 下面按「主线 → 连带修复 → 工程债」的顺序说。 1. 视野重构:从「按玩家体型」到「固定广阔」 起点:用户反馈
官方
1 赞
《变成黑洞》开发日志第 2 期 · 玩法闭环与首次发布截图
《变成黑洞》开发日志第 2 期 · 玩法闭环与首次发布
日期:2026-09-19 当日构建次数:29 次 本期进展 这一期的目标很明确:让游戏能发布。 1. 补全玩法闭环 之前只有「吃」,没有「死」。这一期加上: 死亡判定:被更大的天体吞噬即死亡 死亡界面:显示本局得分、吞噬数、复活次数 结算:最高分记录 2. 首次发布上线 完成了发布所需的全套素材: 游戏图标(黑洞吸积盘特写,1024×1024) 宣传图(主标题 + 黑洞吞噬场景) 3 张商店截图
官方
2 赞
2 回复
《刀光剑影》开发者日志第四期:剑气对标参考、特效拉满截图
《刀光剑影》开发者日志第四期:剑气对标参考、特效拉满
本期进展 1. 剑气形状定为固定月牙,不再跟玩家手绘走 上一期的刀光形状 = 玩家画什么就是什么。实际试下来这个设计有问题:玩家随手画一笔,出来的形状很难看,而且剑气的"帅"完全依赖玩家的手速和手感。 改成固定月牙形状:玩家画什么只决定"出不出招",形状永远是同一道月牙。程序化生成 32 个点:x = t - 0.5、y = -0.11 + 0.22 * (2t-1)²,两端翘起、中间下沉,就是一
官方
1 赞