【游戏功能】
帮战回放里有个名场面:七八个对手把一个剑客围在中间,剑客原地一转,一圈剑光横扫出去,围圈的人齐齐后退半步——包围圈当场破了个口。今天拆的就是这个圆月剑舞,"转身一周、剑光满圈"的环身技能。
一、圆环的三种半径
环身技能的画面其实是三个圆在配合。第一个圆是剑光弧:两道对称的弧绕身横扫,扫过的位置留拖尾,转得越快拖尾越长,最后连成一轮满月。第二个圆是冲击环:剑光扫到射程边缘时贴地扩散一圈,告诉观众"这一圈的伤害到此为止"。第三个圆是光晕:人物周身常驻的一圈细环,呼吸闪烁,是射程提示也是技能开关的信号。三个圆的比例要压住——剑光弧最大、冲击环居中、光晕最小,大小倒挂就会像呼啦圈表演。横扫的椭圆压扁比接近地面透视(大约零点四),横着转不是竖着转,转错了轴就成了螺旋桨。
完整演示在这,默认自动循环,可调旋身圈数:
fx-circleslash
二、幂尔框架实现:旋转相位驱动弧光
弧光的位置全部由旋转相位一个变量算出来,幂尔框架里一个定时器推相位:
local CircleSlash = {}
local KEY = { SPIN_SPD = 3.2, ARC_LEN = 2.1 }
function Circle.Cast(self_)
local spin = { a = 0 }
SL:PlayActorAct(self_, "attack")
SL:Schedule(function(dt)
spin.a = spin.a + dt * KEY.SPIN_SPD * 6.28
local total = SL:GetValue("spinRings") * 6.28
-- 两道对称弧
for half = 0, 1 do
local a0 = spin.a + half * 3.1416
SL:DrawArcFx("blade_arc", SL:GetValue("actorX", self_),
SL:GetValue("actorY", self_) - 46,
a0, a0 + KEY.ARC_LEN, 0.42)
end
-- 火花沿弧随机洒
if math.random() < 0.5 then
local ra = spin.a * 2
SL:PlayBurst(SL:GetValue("actorX", self_) + math.cos(ra) * 74,
SL:GetValue("actorY", self_) - 46 + math.sin(ra) * 30,
"gold_spark", 1)
end
-- 扫中判定: 目标落在旋转半径覆盖区
local target = SL:GetValue("curTarget")
if target then
local dx = SL:GetValue("actorX", target) - SL:GetValue("actorX", self_)
if math.abs(dx) < 74 and not SL:GetValue("circleHitDone") then
SL:SetValue("circleHitDone", true)
SL:FreezeFrame(0.08)
SL:PlayFxAt("impact_ring", SL:GetValue("actorX", self_),
SL:GetValue("actorY", self_))
SL:DeductHp(target, 26)
SL:KnockBack(target, 42)
SL:PlayActorAct(target, "stuck")
end
end
if spin.a >= total then
SL:UnSchedule("circleRun")
SL:SetValue("circleHitDone", false)
SL:PlayActorAct(self_, "idle")
end
end, 0.016, "circleRun")
end
return Circle
一次命中锁用 circleHitDone 做,转三圈也只算一刀,不然狼怪要在原地被抖三遍。
三、击退方向与收招节奏
环身技能的击退方向就是径向——从圆心指向目标,谁离得近谁被推得远。表现层要注意击退和旋转的时序:剑光扫过目标位置的那一帧才击退,提前了像隔空推人,延后了剑光穿身而过才弹开。收招的减速也很讲究:最后一圈要比前几圈慢两成,像刹车而不是急停,剑光的拖尾随减速拉长然后散开——扫出去的劲有个泄掉的过程,整段动作才收得住。最后归鞘那半秒人物回到持刀而立,光散、环灭、狼怪才爬起来——这三件事的顺序别乱,光没散干净就让怪起身,观众会觉得"它怎么不怕了"。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 法师的困扰千篇一律:蓝条见底符纸哑火,站在怪堆里干瞪眼——直到有人给他看了一行账:符落三十五蓝,杖挥一刀回十二…
【游戏功能】 地刺从脚底下炸出来的那半秒,大多数人的选择是躲——只有极少数人按下了偷师。偷师的机制是一场限时的一秒课:它抬手…
【游戏功能】 两只狼配合得像一个人:一只咬前蹄、一只扑后背,多少人栽在这对搭档手里——直到有人往白狼背上钉了一张嫁祸符。离间…
【游戏功能】 弓狼在远处放冷箭,刀狼在近处追着你——两头受气的死局,怎么破?有老手给出的答案匪夷所思:往刀狼身后一站,让它替…
【游戏功能】 buffs[name] = nil ——一行删表项的代码,写尽了驱散全部的狠辣:狼怪顶着三层好处——狂暴加攻、…
【游戏功能】 弓箭手的伤害明明不低,为什么同样的怪别人十秒放倒、他要磨半分钟?看完他的操作就明白了:箭是乱射的,囊空了站在原…