下载 App

【聚光灯21天】DAY17–19·从能玩到能上线:音效动效配音重做

修改于10/2013 浏览 包含 AI 合成内容
TapTap
DAY 13–16 把 H5 版做出来了。这三天做的是让它像个成品。
天做了什么
DAY 17配音整段合并口径重做(134 条覆盖李斯全剧本)+ 四首主题曲换新词 + 五剧本图标
DAY 18音效系统(第三条音频通道)+ 引擎财富见底锁 + 上线素材
DAY 19动效体系(四个优先级批次全落地)+ 印章抽取 + 罗盘巡游测试
horizontal linehorizontal line

一、DAY 17:配音换了口径

旧口径的问题

DAY 13 的配音是按事件切的:
chensheng_c0_0-1_s1.ogg    ← 事件 0-1 的第 1 段
chensheng_c0_0-1_o1.ogg    ← 事件 0-1 的第 1 个选项结算
一条事件被切成 4–5 段,每段单独一个文件。
问题在播放节奏上。 玩家读到哪播到哪,听起来是断续的 —— 一段念完停一下,再念下一段。而叙事文本本身是连贯的一段话,不该被切成念白。

新口径:整段合并

intro                → chapter.intro 全部段合并成一条
<事件id>             → event.segs 全部段合并成一条
choice_<ACT-id>      → 抉择卡 segs 合并成一条
choice_<ACT-id>_o<N> → 抉择卡第 N 个选项的结算
ending_<E>[_<变体>]  → 结局「太史公曰」
crisis_<C-id>        → 危机事件
corr_<N>             → 历史修正
134 条覆盖李斯全剧本。
同时砍掉了两类:主线事件的选项结算、随机事件 R-* —— 2026-10-17 用户拍板。
这是"少即是多"的取舍:选项结算往往只有一两句,单独念反而打断节奏;
随机事件数量多、单条短,配上反而聒噪。

目录结构也跟着改

voice/<剧本>/<章cN>/<切片>          本章的
voice/<剧本>/_shared/<切片>         跨章共享的(choice_/ending_/crisis_/corr_)
查找逻辑:先查本章目录,查不到回落 _shared。

一条不维护清单的设计(沿用)

切片名纯靠推导,import.meta.glob 建索引:
查不到就是没这条配音;这也是用 glob 而不是「预生成 index.json」的原因 ——
清单会漂移,glob 不会。

四条现实约束(决定了写法)

1. 缓冲窗口只有几百毫秒 → 必须提前把切片拉下来,不能播到哪下到哪
2. 串行播放,不能并发 → 并发拉全表会把连接池打满、拖慢正在播的那条
3. 语音要盖住 BGM → 靠基准音量差(配音 0.8 / BGM 0.6),不做压低联动
4. 页面不可见不念 → visibilitychange 隐藏时暂停当前句、队列挂起,
   回前台从断点续播
第 3 条是把 DAY 15 的 ducking 改掉了 —— 之前朗读时压低 BGM,现在是"各播各的,靠音量差"。少一层联动,少一处 bug。

四首主题曲换新词

同一天,四首主题曲换用新词:
剧本新曲名
李斯《仓中鼠》
荆轲《易水寒》
韩信《拜将坛》
项羽《不肯过江东》
李斯那首换得最彻底 —— 以仓鼠意象贯穿一生,首尾落于东门牵黄犬。

五剧本图标

新增 icon-<剧本>.png + icon-<剧本>-line.png(线稿版),进 h5/src/assets/icon/。
horizontal linehorizontal line

二、DAY 18:第三条音频通道 + 一个防软锁

音效系统(game/sfx.ts)

BGM 和朗读之外,补上交互反馈音。源由 Seed Audio 生成(mp3),经 ffmpeg 转 webm(opus)。
与 BGM/朗读的三点差异,写在头注里:
BGM / 朗读音效
并发单元素串行并发短音:按名字开小池,池内轮询空闲元素,每名封顶 3 个
visibility隐藏即暂停不做暂停:全是 0.5–2.5s 的一次性音,让它自然响完比掐断更顺
音量独立设置项读 sfx/sfxGain(设置页 0–100 滑杆,0 即关)
第 1 条是被需求逼出来的:音效可能连发(快速连点按钮)。单元素串行会互相打断,所以必须开池。
只出 webm(opus)一种 —— 2026-10-20 用户拍板:
原本另备一套 m4a 是为 Safari 兜底,目标平台 TapTap 容器的 WebView 支持 opus,不值得付双份体积。
音效清单:back / card / chapter / click / coin / dialog / dice-land / dice-roll / down / ending / enter / fail / gain / seal 等。

引擎:财富见底锁(2026-10-16 拍板)

做音效时顺手在引擎里补了一个防软锁。
问题:有些事件/选项全部都要扣财富。玩家财富归零后,点哪个都失败 —— 卡死在这条路径上。
修法:财富 ≤ 0 时,凡扣财选项一律锁定:
js复制
js
Game.prototype._caifuBroke = function () { return (this.attrs.caifu || 0) <= 0; }; Game.prototype.CAIFU_LOCK_REASON = '财富见底,无力为之';
三个层次都锁:
  1. UI 锁(展示层,灰显 + 理由)
  2. 引擎兜底(UI 锁只是展示层,引擎不依赖 UI 防御)
  3. 抉择卡同口径
有一条设计判断写得很清楚:
钱不够不是险招,直接锁 —— 险招是赌属性,支付能力没得赌。
还有一条防软锁的实测依据:
数据实测存在「全部选项都扣财富」的事件(陈胜 R-1、韩信 R-7)。

顺带修的一处记账 bug

js复制
js
// 用 += 而非 =:同一章可能两次触顶(钳到 95 后又涨过 100), // 覆盖写会让第二次的回落从结算里消失。
以及章内状态归位:
钳制记账一并清零:回溯把 attrs 退回章首快照,那次回落已随 attrs 撤销。
不清的话,章末结算会再报一次玩家从未经历的危机下降。
“章内状态须归位” 这条规律,和 randomCount / _skipRandom 是同一个道理。
horizontal linehorizontal line

三、DAY 19:动效体系

先摸底,再动手

docs/动效优化规划-motion-design.md 是先规划、后落地的产物 —— 用 motion-design 技能对 h5/src 全量摸底后写出的清单。
摸底结论很直接:基础不差,缺体系。
位置现状问题
卡片入场0.45s + stagger已达标;缺 secondary 层
险招骰点dice-shake(linear infinite)linear 用错(线性只给 spinner)
雷达图数值变化时 points 瞬跳重绘唯一「数据可视化无补间」硬伤
浮层hidden 直接 display:none弹窗瞬时出现/消失
页面切换瞬时换页无任何转场
主菜单环境船行 210s / 浮云 driftambient 层教科书级,保留

四批全落地

批次内容
P0 token--ease-ink/--ease-exit + --dur-quick/std/slow,全站 0.15/0.16/0.18s 过渡归拢
弹窗入场 350ms 淡入+上浮;出场用「冻结克隆体」播 200ms 淡出
骰点重排预备起势 + 缓摆 + squash 落定,去掉 linear
朱印盖章ending__seal / seal--big
雷达补间renderRadarTween(380ms ease-out-cubic,rAF 插值多边形/顶点/数值)
页面转场page-in(插入即播,纯 CSS)
逐字墨染.prose__ch opacity+blur 240ms
卡片 secondary内容延迟 0.18s 跟进
云雾 ambient对局页 52s alternate,opacity 0.12
meter 进度条width → scaleX(避免每帧重排)

一处值得记的实现

弹窗出场用「冻结克隆体」:
出场用「冻结克隆体」播 200ms 淡出 —— hidden 语义同步,测试零改动
弹窗出场如果直接改原元素,会和 hidden 语义打架(测试依赖 hidden 判定)。所以克隆一个冻结的副本来播淡出,原元素照常 hidden —— 动效加了,测试零改动。
另一处:meter 进度条从 width 改成 scaleX —— 避免每帧重排。

印章抽取(data/seals.ts)

五印(循史/苟活/稳健/逆天/败局)原本私有在 ui/gallery.ts。DAY 19 结局/详情浮层顶端也要用印章图,于是抽到 data/:
抽到这里避免 game 层反向 import ui 层。

罗盘巡游测试(tests/wheel.cjs)

新增一套专门测罗盘空闲巡游:
加速参数(页内钩子):
- __QS_WHEEL_AUTO_IDLE__  = 800ms(默认 20000)
- __QS_WHEEL_AUTO_SPEED__ = 240°/s(默认 3°/s)

动线:主菜单 → 「开 始 游 戏」→ 选择页,之后不操作,等巡游自动选中。
归位后「明」离左上触发区最近(27°),第一个自动选中的必是它。
用页内钩子把 20 秒的等待压到 800ms —— 和 tapcloud 的上传间隔钩子是同一个手法。
horizontal linehorizontal line

四、三天的数据

项值
配音重做3854 条旧切片删除 → 1200 条新切片(整段合并口径)
配音覆盖李斯全剧本 134 条
主题曲4 首换新词(李斯《仓中鼠》等)
音效14+ 条(assets/audio/sfx/)
动效四个优先级批次全落地
引擎财富见底锁 + 记账 bug 修复(+55 行)
新增模块game/sfx.ts / data/seals.ts / tests/wheel.cjs
新增素材五剧本图标(彩色+线稿)、上线封面、按钮方案三套
测试15 套
horizontal linehorizontal line

五、三天最值钱的三条

① 配音"按段切"到"按整段合并",是节奏问题不是技术问题

旧方案技术上完全可行(每段一个文件,查表精确)。坏在听感上 —— 叙事文本是连贯的一句话,切成 4 段念,听起来就是断续的。
能跑通的技术方案,不一定是对的方案。 判断标准在玩家耳朵里,不在代码里。

② “钱不够不是险招,直接锁”

财富见底锁最有价值的一句注释:
险招是赌属性,支付能力没得赌。
同一个"锁定"的 UI 表现,背后可以是完全不同的机制。险招是概率,财富不足是确定性事实 —— 把确定性的东西做成概率(或反之),玩家立刻能感觉到不对劲。

③ 加动效时,测试零改动是可以做到的

弹窗出场用冻结克隆体播淡出,原元素照常 hidden —— 动效加了,依赖 hidden 语义的测试一行不用改。
"加效果"和"不动契约"不矛盾,前提是加效果时不改元素的语义状态。
horizontal linehorizontal line

明天

  1. 配音真机验收 —— 整段合并后的播放节奏、_shared 回落
  2. 音效真机验收 —— 连发场景(快速连点)的池化表现
  3. 上线素材 —— 封面已出(COVER_HORIZONTAL/VERTICAL),待补截图与宣传图
  4. 成就图标 64 缺失 —— 仍待 P3 美术批次
  5. voice.cjs 偶发红(单跑复绿,与动效无关)—— 待定位
horizontal linehorizontal line
载体:H5(Vite + TypeScript)· 状态:配音整段合并重做 + 音效系统 + 动效体系 + 财富见底锁 · 测试 15 套 · Lua 版同步中
【童谣镇】聚光灯第二次开发日志截图
【童谣镇】聚光灯第二次开发日志
开发进度: 美术 1、主角人物立绘已细化完成 2、所有NPC的QQ人形象与呼吸动画已设计完成 3、大部分UI界面已设计完成 4、面包房建模与树屋建模以及基础房屋、路灯、树木模型已完成。 5、制作过场动效,制作通用动效材质ing 6、广场资产替换、永续桥和植被的资产替换、房屋资产替换,河流制作 7、学校模型的材质完成 8、石墩子、小道具模型制作ing 9、NPC正比胸像绘制ing 策划 1、任务系统
11 赞
10 回复
《气味之城》开发日志#1|为什么"涌现"和猫是天作之合截图
《气味之城》开发日志#1|为什么"涌现"和猫是天作之合
大家好,我是一个人报名了 2026 聚光灯 21 天游戏创作挑战 的独立开发者。今年主题公布那一刻我就笑出了声——涌现。因为我已经想做这个游戏很久了: 《气味之城》:你不是猫神,你只是一只猫。 先说一个所有养猫人都懂的事实:你永远无法"教会"一只猫任何它自己不想学会的事。但你家猫可能自己学会了——听见冰箱开门就瞬移到厨房;你心情不好时过来踩奶;凌晨三点准时在你身上练马拉松。没人教过它,这些行为是它
3 赞
6 回复
00:34
《荒原复苏指南》开发日志④:关卡演示堂堂袭来!!截图
《荒原复苏指南》开发日志④:关卡演示堂堂袭来!!
- 人类曾因掌握元素合成技术而一度辉煌,又因滥用元素能量而逐渐从内里衰败。 - 30世纪80年代。社会文化充斥着激进乐观主义与庞大机械美学,在这里,污染和能源共生,幸福与痛苦并存。官方广播和宣传画里依旧在宣扬“科学将战胜一切”、“元素能量将再造新农田”的口号,而世界主城却已经因为污染过度而濒临崩溃、空间挤压严重。为了寻找新的生存空间与无污染能源,官方启动了“重构拓荒计划”。 - 玩家将作为前线拓展
18 赞
6 回复
《卡牌工业》开发日志 01|从“涌现”到产线对打截图
《卡牌工业》开发日志 01|从“涌现”到产线对打
大家好,我们正在用 Godot 做一个暂名《卡牌工业》的游戏。目前已经跑通了最小的生产与战斗循环,也做了两轮迭代。这篇先记录一下:面对“涌现”这个题目,我们讨论过什么,又为什么最后收敛到卡牌和工厂。 第一步:头脑风暴,涌现可以是什么? 刚看到“涌现”这个题目时,我们的想法几乎朝每个方向散开了。塔防、物理搭建、探索、解谜、经济系统、叙事,甚至增量游戏,都能让简单规则在玩家的操作中长出新的结果。再想下
1 回复
00:07
雨天決行 开发者日志02-人工智能的自我修养截图
雨天決行 开发者日志02-人工智能的自我修养
又和大家见面啦!第二篇日志,说实话一开始不知道该怎么编排,但团队里惊喜的成果越来越多,我们已经迫不及待把更新的内容端上来给大家啦!那么事不宜迟,快来看看都有什么新情报吧ദ്ദി˶ー̀֊ー́ )✧ 一.美术(重磅升级) 以主美小为的生命力作为燃料(bushi)本次美术组取得了大进程!首先是各个ui界面的优化和细化,上次大家看到时还只是初具雏形的草稿,现在大多都完整起来了哦! 同时,随着配色的补全,手
43 赞
36 回复
00:30
《失心》游戏开发者日志01|游戏UI迭代及实机演示截图
《失心》游戏开发者日志01|游戏UI迭代及实机演示
进入《失心》之前,玩家首先看到的是我们工作室 UNLOOK 的标识。我们将原来的标识转成 SVG,并让其中的红色瞳点转动、观察,再逐步显露完整字形,希望这个短暂的开场能带出一点好奇和不安。 这次《失心》的开局 UI,我们围绕小灵通(因为游戏的主要交互道具就是小灵通)做了几轮调整,希望玩家从打开游戏开始,就能感受到故事里的年代和气氛(故事年代背景为2000s)。 早期版本先确定了一个方向:把菜单放进
15 赞
10 回复
00:10
群迹·上取其下,下取其上截图
群迹·上取其下,下取其上
#聚光灯gamejam开发者日志 向大家汇报一下今日进度,目前在和蚁群的默认移动算法进行斗智斗勇。或许是我的AI对蚂蚁有别样的理解,其实最初写出的方案更接近于围绕着恒星公转的行星。 哦我还以为文章里可以插入多支视频视频,想要展示一些其它的运动方式,可惜了。那么就简单在上方传一个比较典型的,有点类似于蟑螂的运行方式。 目前仍在解决蚁群的随机运动,和玩家可操纵性之间的平衡问题。以及如各位所见,目前的
4 赞
1 回复
《源墨名出》开发者日志 01|情绪会变成颜色,也会淤成一团墨截图
《源墨名出》开发者日志 01|情绪会变成颜色,也会淤成一团墨
大家好,这里是脑洞俱乐部,很高兴能够站在这里与大家一同参加本次聚光灯大赛。 10 月 1 号题目公布 ——「涌现」。我们盯着这两个字沉默了三分钟,然后有人说:要不,我们聊聊情绪吧。 于是就有了《源墨名出》 我们是怎么理解 "涌现" 的? 我们觉得,情绪这东西本来是看不见的。但当它被你看见、被你说出口、被人接住的时候,它就 "涌现" 成了具体的样子 —— 我们让它涌现成了颜色。 红是愤怒,橙是喜悦,
15 赞
13 回复
【2026聚光灯日志01】什么叫你把手牌,骰子和战棋融合了?截图
【2026聚光灯日志01】什么叫你把手牌,骰子和战棋融合了?
大家好啊,我是官方小编,一位还在学校的独自开发的苦逼带学生 这次算是第二次正式参加GameJam,而这回的比赛主题是【涌现】 嗯…老实说,一开始我还真只是从中文语义上来看,理解成“大量的出现”,直到询问ai哦哦哦我这就才想起来还有英文的“整体大于部分之和”意思来着 说起这个主题的意思,立马想起的类 吸血鬼幸存者 ,或者是 文明 系列的各种爆怪,爆兵的设计,即大量的出现敌人或者单位 而从第二个
4 赞
4 回复
开发者日志#01:涌现!! 披着科幻外衣的涌现式增量游戏!!!!截图
开发者日志#01:涌现!! 披着科幻外衣的涌现式增量游戏!!!!
随着Game Jam 主题公示,我们团队立马着手维持了三天的激烈讨论!决定做一个披着科幻外衣的蚂蚁农场以boids算法为灵感的涌现式增量游戏!!! 至此,方案敲定,我们团队将开发一个可升级的自主群体模拟,并且初步规划了玩家游戏时的体验流程: (1)阶段1(开局30s,触发痛点,会有一次提升,但是游戏仍然艰难):一张地图分布着资源点和仓库,玩家此时只能徒手采集资源点的矿石拖入仓库,矿石可以造机器人;
14 赞
7 回复