【游戏功能】
幽冥火咒是道士的持续伤害技能:一咒命中后紫火附着不灭——灼烧期间紫焰缠身逐跳掉血。今天讲幽冥火咒的表现,看"附着"这个概念怎么从一枚咒弹变成缠身的紫焰。
一、咒弹、附着、灼烧三段缠身
幽冥火咒的缠身三段。咒弹段:紫色咒弹从人物指尖飞向狼怪——咒弹的紫色是幽冥火的身份色:别的火是橙红、幽冥火是紫。附着段:咒弹命中的瞬间紫焰缠上狼怪——附着的标志是狼怪周身出现四团紫色火苗绕体旋转,火苗的存在就是"中了咒"的宣告。灼烧段:每隔零点五秒跳一次伤害数字、每次伤害伴随紫焰粒子——灼烧的持续就是幽冥火的输出:一咒四跳、四跳四十点。三段的核心是"不灭":附着期紫焰缠身不消,直到灼烧时长自然耗尽。
完整演示在这,默认自动循环:
fx-ghostfire
二、幂尔框架实现:咒弹飞行与灼烧跳伤
咒弹飞行到命中后启动灼烧循环,灼烧按秒跳伤:
local GhostFire = {}
local KEY = { BURN_TICK = 0.5, BURN_DMG = 8 }
local burning = {}
function GF.Cast(self_, target, duration)
SL:PlayActorAct(self_, "cast")
SL:PlayFlyFx("ghost_orb", SL:GetValue("actorX", self_) + 20,
SL:GetValue("actorY", self_) - 56,
SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 58,
380, { color = "purple" }, function()
burning[target] = { jumps = duration, timer = 0 }
SL:PlayFxAt("ghost_ring", SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 58)
SL:ShowSystemTips("幽冥火附着!")
end)
SL:Schedule(function(dt)
local b = burning[target]
if not b then SL:UnSchedule("gfBurn") return end
b.timer = b.timer + dt
if b.timer >= KEY.BURN_TICK then
b.timer = b.timer - KEY.BURN_TICK
b.jumps = b.jumps - 1
SL:DeductHp(target, KEY.BURN_DMG)
SL:ShowHitNum(target, KEY.BURN_DMG, "ghost_fire")
if b.jumps <= 0 then
burning[target] = nil
SL:UnSchedule("gfBurn")
SL:ShowSystemTips("火焰熄灭")
end
end
end, 0.016, "gfBurn")
end
return GF
灼烧的跳伤跟撕裂的跳伤用的是同一套循环——区别只在粒子颜色和伤害数字的颜色。
三、紫焰粒子与灼烧的节奏
紫焰的粒子是灼烧的氛围核心:四团紫色火苗绕体旋转、火苗的大小随灼烧时间递减——火苗越来越小就是"快烧完了"的视觉预告。灼烧的节奏零点五秒一跳:跳伤的间隔不要太短(太短像DPS技能),也不要太长(太长像摆设)——零点五秒刚好让玩家感受到"持续在掉"而不是"偶尔在掉"。最后,灼烧结束的"熄灭"动画要自然:紫焰从缠绕的火苗变成几粒残余的火星、火星飘两下消散——自然熄灭的优雅比突然消失的干净更能体现幽冥火的阴柔气质。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…