【游戏功能】
帮会一位法师抱怨他的"狮子吼"技能输出太低不想用了——我打开战斗记录一看,这技能本来就不该有高输出,它的价值是"吼退+恐惧"的控制效果。今天拆狮子吼的表现,看"一声吼"怎么做出击退加恐惧的双重效果。
一、蓄气、吼出、震退三段爆发
狮子吼的爆发三段。蓄气段:人物下蹲双手抱拳在嘴前,身后微尘被震起的碎屑扬起——蓄气的预备动作是全场的安静前奏。吼出段:金圈三重波纹从人物嘴里向外扩散,吼声的声波环一圈比一圈大——声波环是吼的视觉锤,每一圈都在推狼怪后退。震退段:狼怪被吼退+恐惧不敢近身——震退的距离由吼的力道决定,恐惧标记挂在狼怪头顶。三段的核心是"声波的推力":声波环一圈圈扩散,狼怪就被一圈圈推远,吼声消失狼怪也就停下了。
完整演示在这,默认自动循环:
fx-roar
二、幂尔框架实现:声波环与恐惧标记
吼出的声波用多环扩散渲染,恐惧用计时器+标记:
local Roar = {}
local KEY = { WAVES = 3 }
local fearT = 0
function RO.Execute(self_, target)
SL:PlayActorAct(self_, "cast")
SL:PlaySfx("roar")
-- 声波环: 三圈依次扩散
for w = 1, KEY.WAVES do
SL:ScheduleOnce(function()
SL:PlayFxAt("roar_ring", SL:GetValue("actorX", self_),
SL:GetValue("actorY", self_) - 50, w)
end, w * 0.12)
end
SL:ScheduleOnce(function()
SL:ScreenShake(0.28, 5)
-- 击退: 力道决定距离
local power = SL:GetValue("roarPower") or 100
SL:KnockBack(target, power)
SL:PlayActorAct(target, "stuck")
fearT = 2.5
SL:ShowTipAbove(target, "吼退!")
end, 0.4)
-- 恐惧期: 狼怪不敢近身
SL:Schedule(function(dt)
if fearT <= 0 then SL:UnSchedule("fearRun") return end
fearT = fearT - dt
SL:ShowTipAbove(target, "!")
-- 恐惧中狼怪远离玩家
local dx = SL:GetValue("actorX", target) - SL:GetValue("actorX", self_)
SL:SetActorVelocity(target, dx > 0 and 30 or -30, 0)
end, 0.016, "fearRun")
end
return RO
恐惧期的远离速度三十像素每秒——逃跑的速度是散布的,不是直线冲刺,晃晃悠悠地"不敢过来"才像被吓到了。
三、击退力度与恐惧的时长
击退力度滑块和恐惧时长是两个独立的参数轴:力度决定距离、恐惧决定时间——两者组合出"短距长惧"和"长距短惧"的不同体验。恐惧时长两秒半是体感最佳值:太短狼怪立刻回来没安全感,太长等于眩晕浪费时间。恐惧标记的感叹号要闪烁:红色感叹号在狼怪头顶每零点五秒闪一次——闪烁的频率就是恐惧的"心跳",闪得越快越慌。最后,吼声的音效用低频的"嗷"加高频的回响——低频是声音本身,高频是山谷回音,两层叠出来才有"狮子吼"的霸气。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…