【游戏功能】
为什么有些技能放出去玩家毫无感觉,有些技能光预警那一秒就让人心跳加速?差别往往不在伤害,在"预告"。灭天火就是教科书级的预告系技能:符印先亮,火柱后到,玩家被烧之前有整整半秒去后悔走位。今天把这套"先打招呼再动手"的表现拆开讲。
一、预告、爆发、余韵三段式
灭天火的时间轴切三段。第一段预告(0.55 秒):狼怪脚下亮起环形符印,符印旋转、呼吸、亮度渐强——这段时间是给目标的心理压力期,也是给旁观玩家的读招期。第二段爆发:火柱从目标正头顶砸落吞没全身,白橙闪光、屏幕轻震、冲击环贴地扩散,伤害数字在火柱顶部跳出。第三段余韵(灼烧跳数):火柱散了,地上留一圈余焰,每一跳从狼怪身上蒸起几缕火星、跳出一个小号数字。三段的数字要有层级:爆发一记大字,余焰每跳小一号,玩家一眼分清主次。
完整演示在这,默认自动循环,可调灼烧跳数:
fx-skyfire
二、幂尔框架实现:一个延时器管全流程
整套流程就是"施法→延时→结算→循环灼烧"四级,用 SL:ScheduleOnce 串起来最干净:
local SkyFire = {}
local KEY = { MARK = 0.55, TICK = 0.55 }
local burning = {}
local function GroundMark(target, dur)
-- 脚下符印:用 SL:Schedule 驱动旋转与呼吸
local t = 0
SL:Schedule(function(dt)
t = t + dt
local a = math.floor(90 + math.sin(t * 12) * 60)
SL:PlayGroundFx(target, "fire_mark", a)
if t >= dur then
SL:UnSchedule("sfMark")
SL:StopGroundFx(target, "fire_mark")
end
end, 0.016, "sfMark")
end
function SkyFire.Cast(self_, target)
if burning[target] then return end
SL:PlayActorAct(self_, "cast")
GroundMark(target, KEY.MARK)
-- 预告期结束,火柱结算
SL:ScheduleOnce(function()
local x, y = SL:GetValue("actorX", target), SL:GetValue("actorY", target)
SL:PlayFxAt("fire_pillar", x, y)
SL:ScreenShake(0.3, 5)
SL:DeductHp(target, 18)
SL:ShowHitNum(target, 18, "fire_big")
SL:PlayActorAct(target, "stuck")
burning[target] = { jumps = 3, timer = 0 }
SkyFire.Tick(target)
end, KEY.MARK)
end
function SkyFire.Tick(target)
SL:Schedule(function(dt)
local b = burning[target]
if not b then SL:UnSchedule("sfBurn") return end
b.timer = b.timer + dt
if b.timer >= KEY.TICK then
b.timer = b.timer - KEY.TICK
b.jumps = b.jumps - 1
SL:DeductHp(target, 7)
SL:ShowHitNum(target, 7, "fire_small")
if b.jumps <= 0 then
burning[target] = nil
SL:UnSchedule("sfBurn")
end
end
end, 0.016, "sfBurn")
end
return SkyFire
注意 burning 表以目标句柄做 key,同一目标身上火柱没散就不吃第二道,防重叠全靠这一行判断。
三、预告期的走位博弈
预告的价值全在那半秒。目标如果走出符印圈,火柱落空——所以要给符印做"跟随或不跟随"的设计决策:跟随目标(追踪型,必中但可以少跳一截伤害)和固定地面(走位型,可完全躲掉)是两种手感。传奇系传统走固定地面,躲技能本身成了玩法。表现上无论哪种,符印最后一跳都要急促闪烁两下再爆,这个"加速心跳"的小节奏,比火柱本身更让玩家记忆深刻。
余焰的数字还有个细节:每跳数字位置要小幅随机偏移,别让三个"-7"叠在同一点上摞成柱。左右各偏十几像素,飘字方向轮流换边,画面立刻活了。灼烧结束的瞬间让余焰"叹口气"——一圈小火星向内收拢消散,比直接消失多一层收尾的讲究。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 heat = heat + 1; if heat = 3 then rest = 1.6 ——两行管刀温的代码…
【游戏功能】 兄弟俩打一只狼,哥哥攒了三层劲自己放,一层加二十五;弟弟站在旁边干瞪眼——直到有人把劲递了过去:同样的三层,过…
【游戏功能】 有篇纠错单写得像小说:同一只狼,有人打它半小时血线稳如老狗,有人三分钟放倒——排查到最后发现,会打的那个从头到…
【游戏功能】 追着你满场跑的狼怪,为什么绕过一根石柱就懵在原地?脱影的答案藏在柱子背后:视线被石柱掐断一秒二,它脑子里"你"…
【游戏功能】 巡查群里有人喊邪门:同一套连招,昨天刀刀见血,今天刀刀被挡——查录像看到第三遍才看懂:狼怪学会了。他的出刀间隔…
【游戏功能】 if hand == last then acid = acid + 1 ——一行数手的判定,攒出了换手全部的…