【游戏功能】
输出榜第一的拳师被踢出了团本——理由是"挂着输出不干活"。他委屈:我一直在打啊。队长甩过战斗记录:你打的怪,护甲值从没掉过,你那十二点十二点的伤害跟挠痒一样。今天拆碎甲连拳,讲讲"打疼"之前的"打裂"怎么表现。
一、裂痕是会记账的
碎甲连拳的账本分两层。明账:每拳的即时伤害,十二点起步。暗账:每拳在护甲上留一道裂痕,裂痕让后续所有攻击的收益递增——第一拳裂甲疼十二,第二拳同位置打就是十七,裂到第四道,一拳下去三十四还带"碎甲"暴字。表现层的核心是把暗账亮出来:狼怪护甲上的裂痕用金线画出,一道比一道长、一叠比一亮——裂痕本身就是进度条,它比任何 UI 都直观。第四道裂痕落成的瞬间护甲轰然碎裂,甲片四散、金环炸开、大字"碎甲"——前三拳的零碎投入在这一拳连本带利收回。
完整演示在这,默认自动循环:
fx-crackfist
二、幂尔框架实现:裂痕层与伤害递增
裂痕状态挂在目标身上,伤害按裂痕数递增:
local CrackFist = {}
local KEY = { MAX = 4, BASE = 12 }
local cracks = {}
function CF.Punch(self_, target)
SL:PlayActorAct(self_, "attack")
SL:ScheduleOnce(function()
local cur = cracks[target] or 0
if cur >= KEY.MAX then
-- 碎甲重击: 清账走人
SL:DeductHp(target, 34)
SL:ShowHitNum(target, 34, "armor_break")
SL:ScreenShake(0.3, 5)
SL:PlayActorAct(target, "stuck")
SL:PlayFxAt("armor_shatter", SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 58)
cracks[target] = 0
return
end
local bonus = SL:GetValue("crackBonus") or 25
local dmg = math.floor(KEY.BASE + cur * bonus / 4)
SL:DeductHp(target, dmg)
SL:ShowHitNum(target, dmg, "crack_" .. cur)
SL:PlayActorAct(target, "stuck")
cracks[target] = cur + 1
-- 画新裂痕
SL:PlayFxAt("crack_line" .. (cur % 4),
SL:GetValue("actorX", target) - 20 + cur * 13,
SL:GetValue("actorY", target) - 58)
end, 0.24)
end
function CF.OnTargetDead(target)
cracks[target] = nil
end
return CF
裂痕分四档存进以目标句柄为 key 的表,换目标自动从零开始——旧的裂痕不能继承到新怪身上,那是另一件甲。
三、递增档位与清账仪式
每裂加成的滑块是节奏阀:加成低,四拳都像普攻,玩家没动力连打;加成高,第二拳就开始翻账,前三拳成了走过场。两成五到三成五是甜点:每拳都比上拳疼得明显,但还不到质变。第四拳的碎甲要有"清账仪式":甲片四散、金环炸开、大字报账,然后狼怪顶着一副新甲站起来——新甲意味着裂痕从头积累,循环重启。碎甲大字的位置固定在狼怪胸口偏上,四道裂痕的视觉重心也在这一带——打头胸的位置感和碎甲的爆点重叠,玩家才会觉得"我打的就是这块甲"。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 围住一只怪的贪心人人都有:三面堵死一只不漏——可围三阙一的规矩偏偏唱反调:围三面留一口,怪只会往那口里钻——口…
【游戏功能】 元素搭配的老话是水火不容,可战场上的说法得倒过来念:水是雷的引信。引水的机制是一场两步的合谋:先泼一瓢水把地泼…
【游戏功能】 低血大怪的回血机制人人见过,可血珠的回血藏着一手"要你去抢"的心机:它每掉两成血就吐一颗血珠在地上,两秒内不踩…
【游戏功能】 隐形怪人人都遇到过,可现身的机制比隐形狠:它钻进影子里消失,一秒后从你脚下画的影圈里钻出来,背刺三十四点——影…
【游戏功能】 有人纳闷:大怪危机预警里最气人的一档是什么?不是它放大招,是它开阵——法阵一转,转满三秒蹦出两只小狼,好好的单…
【游戏功能】 if chg <= 0.8 then lock = true ——一行把"锁定"写进蓄力里的判定,道破了蓄力炮…