【游戏功能】
SL:ScheduleRepeat(0.30, function() dropSword(i) end) -- 五剑依次落
万剑归宗的骨架就这一行:一把 0.30 秒的循环调度,把五柄剑按节拍砸下去。但让这行代码"好看"的东西全在循环外面——落点锁谁、规格怎么递进、末剑凭什么压轴。今天顺着这行拆万剑归宗。
一、起手、落剑、归宗三段
万剑归宗的循环三段。起手段:法师举剑,头顶蓝光聚拢——起手是"号令",一喊剑名万剑齐落的名头,全靠这一下仪式感撑着。落剑段:五柄光剑依次从天而降,砸向狼怪的头顶——注意落点是实时取的:每一柄剑出手前都现取狼怪当前的头顶坐标,前四剑落完狼怪挪了两步,第五柄照样追到新的头顶。归宗段:第五柄剑的规格全面升级——更大、更粗、更亮、更响,砸出整轮的终结伤害。三段的核心是"递进":前四剑 18、24、30、36 的垫刀数字一路爬升,第五剑 95 一锤定音——数字的斜率就是玩家的期待曲线。而"归宗"二字的分量,一半在这柄巨剑的规格里,一半在前四剑憋出来的耐心里。
完整演示在这,默认自动循环:
fx-swordrain
二、幂尔框架实现:节拍表与实时落点
五剑的节拍写进一张表,落点在每次投放前现取:
local SwordRain = {}
local BEATS = { 0.30, 0.30, 0.30, 0.75 } -- 四段间隔, 第五剑压轴多等半拍
function SL:CastSwordRain(caster, target)
SL:PlayActorAct(caster, "cast")
SL:ShoutFx("sword_call") -- 起手号令
local delay = 0.4
for i = 1, 5 do
local idx = i
SL:ScheduleOnce(function()
local hx = SL:GetValue("actorX", target) -- 现取头顶
local hy = SL:GetValue("actorY", target) - (idx == 5 and 96 or 70)
SL:DropSword(hx, hy, idx == 5)
SL:HitActor(target, idx == 5 and 95 or (12 + idx * 6))
SL:ShowTipAbove(target, idx == 5 and "-95 归宗" or ("-" .. (12 + idx * 6)))
end, delay)
delay = delay + (BEATS[idx] or 0.3)
end
end
return SwordRain
节拍表比裸的 0.30 * i 多给了一样东西:重音。第五剑前那半拍停顿(0.75)是整轮的呼吸——前四剑匀速砸完,突然半秒安静,巨剑才砸下来,节奏上的"顿"就是规格上的"大"。落点现取这条纪律不重复了,跨调度传坐标必劈空。
三、剑的画法:从光条到巨剑
剑雨的视觉成本极低、收益极高,因为剑就是"一条竖线"的三层画法。小剑:细蓝线加白色芯线,外面包一圈同色宽笔触的辉光——三层叠完就是"光剑"。巨剑:同样的三层,线宽翻倍、长度翻倍、辉光加宽,再补一层下坠拖影——同一套画法,参数拉开就是两个量级。落地那一下各补一撮白色迸屑,大剑额外给金色环加震屏——落点反馈比剑身本身更决定打击感。数字要跟着剑走:每柄剑的飘字在剑尖触体的那一帧冒出来,早一帧晚一帧都像浮空对不上刀。最后是整轮的收尾感:第五剑落定,头顶的"归宗"数字要压着前四个数字的总和往上顶——数字尺寸拉大两档、金色、带感叹——玩家的眼睛会自动把这串数字读成"垫刀-垫刀-垫刀-垫刀-终结",递进结构不用任何 UI 讲解就传到了。
四、锁定与公平:追到什么程度算讲理
五剑全锁当前头顶,狼怪等于躲无可躲——那它的博弈空间在哪?在打断与间隔。落剑的一秒多里,狼怪若被推走、被冻住,剑照样追——锁定的是"头顶"这个锚点,不是"狼怪"这个单位,目标死亡时剩余的剑改成砸地:一声闷响一撮尘土,比凭空消失体面。而对玩家侧,万剑归宗的公平性靠两件事兜住:一是前四剑伤害刻意压低——全中的总伤不如一次成功的爆裂火焰,高风险追踪弹用低单伤交税;二是冷却给足——起手号令的音效越华丽,冷却数字越长,万剑归宗是"一波的答案",不是"循环的一部分"。节拍表、实时落点、三层光剑、数字递进——四件拼完,这一行 ScheduleRepeat 才配得上"万剑归宗"四个字。
五、剑雨里的细节账
几处小账补在后面。剑的出手位置:五柄剑不是从法师头顶飞的,是从"狼怪头顶上方的高空"直接砸下——剑雨的来源是"天",法师只是喊单的人,这个因果让起手号令的存在合理:喊完,天就下雨。数字的排布:连落的数字会叠成一串,第五剑的大数字出来前,前四个小数字已经飘高散去——结账的 95 天生不拥挤;若把前四剑的数字关掉只留第五剑,轮次的"递进感"反而塌了,小数字是节奏的刻度,不是噪音。受击闪白与剑同步:每一柄剑触体都给一次两帧的闪白,五次微闪加末剑一次长闪——闪白的节奏就是剑雨的节拍器,闭着眼都能数出落了几柄。演示的自动演武里还有一处值得看:整轮落完之后狼怪会顿一下才恢复巡逻——这一下顿不是逻辑,是表现上的"喘",让一分钟的等待(冷却)有个情绪收尾。最后是失败态的观感:目标中途死亡,剩余的剑改砸地面,落点尘土比命中更响——"万剑落空"比"万剑消失"有交代,砸空的剑本身就是下一轮冷却的视觉倒计时。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 var inZ=cT 0&&M.x-26 =zoneL&&M.x+26<=zoneR ——先拆这一行。抽税的账…
【游戏功能】 上一版藏了个打满全场才会露头的隐蔽报错:碎地砖的裂痕跨窗不清零——第一窗三块砖裂完塌过一回,第二窗新铺的砖被它…
【游戏功能】 先抛一个坑:打不过的怪,能不能把它从地里顶起来?听着像玩笑,可"立足"这件事本身就是怪的命根——爪子再快,脚不…
【游戏功能】 前阵子的数值事故出在一只看门首领身上:玩家发现站在震地纹里挂机,首领的爪永远抬到一半——脉冲每两秒半重置一次它…
【游戏功能】 M.stepAcc=M.stepAcc+spd dt ——先拆这一行。行账纹的账本全在这行累加里:怪每挪一步,…
【游戏功能】 上一版埋了个玩家骂了半个月的隐蔽报错:踏灵纹的加成"时灵时不灵"——明明站在圈里,刀就是不加成;原地不动反而一…