【游戏功能】
冰霜之刃是战士的附魔技能:刀刃附上冰霜后每砍一下狼怪身上结一层冰——冰层越厚走得越慢,冰层满了完全冻结。今天拆冰霜之刃的表现,看"减速递增"的机制怎么从砍一刀变成冻一头。
一、附冰、结冰、冻结三段循环
冰霜之刃的循环三段。附冰段:金光一圈后刀刃泛蓝——冰刃附体是所有冰系近战技能的入场仪式。结冰段:每砍一下狼怪身上多一层冰——冰层越多走得越慢,减速百分比随冰层数递增。冻结段:冰层满五完全冻结、狼怪彻底不能动——冻结前的减速是过程,冻结是结果。三段的核心是"递增":减速不是恒定的而是递增的——第一刀减慢两成、第五刀完全冻结,递增的减速让近战的每一下都有意义。
完整演示在这,默认自动循环:
fx-frostblade
二、幂尔框架实现:冰层数与减速百分比
冰层数挂在目标身上,减速百分比按层数递增:
local FrostBlade = {}
local KEY = { ICE_PER_HIT = 1, SLOW_PER = 20 }
local iceStacks = {}
function FB.OnAttackHit(self_, target)
iceStacks[target] = math.min(5, (iceStacks[target] or 0) + KEY.ICE_PER_HIT)
local stacks = iceStacks[target]
SL:PlayBurst(SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 58, "ice_crystal", 6)
SL:ShowTipAbove(target, "冰 +" .. stacks)
-- 减速百分比: 每层 20%
local slowPct = math.min(100, stacks * KEY.SLOW_PER)
SL:SetSlow(target, slowPct)
-- 冰层满: 完全冻结
if stacks >= 5 then
SL:FreezeActor(target, 1.5)
SL:ShowTipAbove(target, "完全冻结!")
SL:PlayFxAt("full_freeze", SL:GetValue("actorX", target),
SL:GetValue("actorY", target))
end
end
-- 冰层衰减: 停止攻击三秒后开始消融
function FB.Thaw(dt)
if SL:GetValue("timeSinceLastHit") > 3 then
for target, stacks in pairs(iceStacks) do
iceStacks[target] = stacks - 1
if iceStacks[target] <= 0 then
iceStacks[target] = nil
SL:SetSlow(target, 0)
end
end
end
end
return FB
冰层的衰减三秒后开始——三秒不打就消一层,消融的速度是"紧张感"的来源。
三、减速递增与冻结的红利
减速递增的曲线是线性加阶梯:每层二成线性递增、第五层跳到完全冻结——线性段让玩家理解"每砍一下更慢",阶梯段给玩家一个"攒到满层有惊喜"的目标。冻结一点五秒是全套技能最大的红利:一点五秒的完全不动足以让队友打一轮技能——冰霜之刃是辅助技不是输出技,它的价值在于创造窗口。最后,冰层的可视化和减速的数值要严格同步:三层冰减六成速——可视化的冰层厚度和减速的百分比要一一对应,玩家看着冰层就能算出速度——这种可视化与数值的对应关系是所有堆叠类技能的手感根基。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…