【游戏功能】
三只狼站成一排,火法扔了一轮技能只烧到一只——紧接着怪异的事发生了:后两只没人碰,自己烧了起来。传染的机制就这一条:点着一只,火顺着邻居链自己蔓延——扎堆的狼群就是柴堆。今天拆传染,看"蔓延系"怎么把一次单体点火,滚成一场烧遍全场的连营大火。
一、点火、蔓延、烧尽三段
传染的循环三段。点火段:一刀落在第一只狼身上,它被点着,头顶烧起四秒的火——点火段是全技能的第一把火:这一刀只有三十点,账面寒酸,可它的意义是"柴堆里划的第一根火柴"。蔓延段:着火的狼身边七十像素内,火顺着邻居链自己爬过去,爬到谁谁烧四秒——蔓延段是全技能的雪崩:烧着的每一只都是新的火种,扎得越紧传得越快,火从第一只爬到第三只,你一刀没出。烧尽段:火烧尽四秒后熄灭,怪倒下,火在熄灭前还会跳给最后一只邻居——烧尽段是全技能的收尾:整群狼从头烧到尾,你只出过一次手。三段的核心是"链式自走":传染不提高你的任何数值,它只是把"一打一"的仗改成了"点一把火看它烧"的仗。
完整演示在这,默认自动循环:
fx-spreadfire
二、幂尔框架实现:火苗是一份会自己跑的名单
传染的账本是一张着火名单加一条邻居判定——
local SpreadFire = {}
local BURN_T = 4.0 -- 燃烧四秒
local LINK_R = 70 -- 邻居判定七十像素
local LIT_DMG = 30
local wolves = {}
function SL:Ignite(w)
w.lit = true
w.fire = BURN_T
SL:ShowTipAbove(w, "-30 点火")
end
function SL:OnTick(dt)
for _, w in ipairs(wolves) do
if w.lit and not w.dead then
w.fire = w.fire - dt
if w.fire <= 0 then w.dead = true end
end
end
for _, w in ipairs(wolves) do
if w.lit and not w.dead then
for _, n in ipairs(wolves) do
if not n.lit and not n.dead
and math.abs(n.x - w.x) < LINK_R then
n.lit = true -- 火自己找邻居
n.fire = BURN_T
SL:ShowTipAbove(n, "传染")
end
end
end
end
end
return SpreadFire
双层循环是全技能的引擎:外层扫燃烧者、内层扫邻居——传染不需要你瞄准第二只,它只需要名单里多一个燃烧者。
三、蔓延的演出规格
火苗是全技能的脸面:燃烧的狼周身一层橙红的火雾、火星一粒粒往上飘——火雾要"飘",飘着的火才是活的,静止的红光只是染色。传染的一瞬要"递":火从着火的狼身上探出一小簇、落在邻居头上——递的一小簇是"火在找下家",找到了就续燃。燃烧的倒计时挂在头顶:四秒的数字一秒一秒地缩——倒计时归零的那只烧尽倒下,倒计时还在的继续烧——每个头上的表各自走各自的,互不干涉。传染链的方向要"可视":火探向邻居的一小簇带着方向感,方向就是"下一个是谁",玩家读方向就知道火会怎么烧完整场。
四、定价与三条火规
蔓延系的定价一句话:点火三十、传染自动、四秒一轮——三只狼四秒全倒,这门功夫的效率不靠手速,靠的是怪的站位。三条火规:其一,火不回头——烧过的熄了就熄了,不会回燃,传染链是单程的;其二,断链靠距离——把一只没着火的拽出七十像素,它就是这场火里的孤岛,距离是唯一的防火墙;其三,燃烧不叠加——两层火不烧两倍,同体只记一份燃烧,重复点火是浪费柴火。与溅射类对照着看:同是"一打多"的账,溅射是一刀打三个——三个同时挨打;传染是火烧一个再传两个——三个先后挨烧,群体系的两个门派在"同时结账"还是"链式结账"上分了家。
五、传染系的柴堆学:站位是玩家可以经营的伤害
传染真正翻案的是"怪扎堆"这个传统灾难:别的体系里扎堆的怪是控制噩梦,在传染系里扎堆的怪就是一垛码好的柴——它们站得越近,你的第一把火越值钱。老玩家的开怪口诀是"点边不点中":先点最边上的那只,火顺着邻居链往中间烧,烧的顺序和你的收割顺序天然一致。对观战者,火从第一只跳到第三只的画面是最有"蔓延感"的镜头:火自己会走这件事,看一次就忘不掉。工程收尾记一笔:传染的判定要每帧重扫而不能只在点火瞬间扫一次——火蔓延到新邻居时,新邻居身边可能又有凑热闹的,每帧重扫才让火真正"活"着走完全场。最后留给数值组的一句话:七十像素的邻居判定是这门功夫的柴垛密度——密度越低越考引怪,密度越高越像白送,密度就是传染系的全部难度曲线。
写完再留一句给做蔓延系的同学:群体点燃最容易做成"命中几个烧几个",而它本该是一场自己会烧完的连营大火——链要自己爬、火要自己找、烧尽要烧得有先后,火活了,玩家才肯把第一把火当艺术来点。\r\n\r\n传染的火还有一个隐藏的解法:把两只狼隔远点、中间那只点着——火传不过去,中间那只就会独自烧成引信——引信烧尽前的四秒,够你围着它做很多事。传染系的深度,就在这把火传不传、什么时候传的判断里。
补一个演示彩蛋位:火传到最后一只的瞬间,最先点火的灰烬恰好烧尽——头尾两团火在同一帧交接,这个交接帧就是传染系的谢幕礼,谢完幕,满地灰烬全是你一个人点的火。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…