【游戏功能】
有玩家报了个怪事:御剑术明明还没松手,剑自己飞出去了——追了半天日志才发现,剑绕到第三匝的时候角度计数溢了匝,判定当成"绕满"提前脱了手。御剑术的玄机就藏在匝数里:剑绕人三匝是蓄势,绕满松手才咬人。今天拆御剑术,看"环绕蓄势"怎么把一柄剑演成一记看得见发条的杀招。
一、起剑、绕匝、脱手三段
御剑术的循环三段。起剑段:剑从鞘中轻鸣出窍,悬在剑客肩侧微微发亮——出鞘的那一瞬要轻,御剑的门面不在出鞘的猛,在悬停的稳:一柄安安静静等发条的剑,比一柄乱颤的剑贵气得多。绕匝段:剑贴着剑客绕身飞转,一圈、两圈、三圈,转速一圈比一圈急,剑尾拖出的光带越绕越亮——绕匝是全技能的心跳,观众数着匝数,就是数着这一剑的力道;头顶的状态字跟着报"第一匝""第二匝""第三匝",绕的圈数就是蓄力的进度条。脱手段:第三匝到头,剑不回头,从切线方向激射而出,一条银线直取狼怪喉口,一百二十五的大字炸在头颅高度——脱手要决绝:上一刻还在绕,下一刻已在喉,绕满三匝的力道全压在这一条直线上。三段的核心是"绕即蓄力":发条拧在明面上,松手的那一刻谁都不意外。
完整演示在这,默认自动循环:
fx-orbitsword
二、幂尔框架实现:匝数就是蓄力账本
环绕与脱手是同一柄剑的两个状态:
local OrbitSword = {}
local LOOPS = 3 -- 三匝起手
local LOOP_T = 0.75 -- 一匝零点七五秒
local DMG_THROAT = 125
local sword = nil -- { mode, ang, loops, ... }
function SL:CastOrbit(caster)
if sword then
SL:ShowTipAbove(caster, "剑还没落")
return
end
SL:PlayActorAct(caster, "cast")
sword = { mode = "orbit", ang = -1.57, loops = 0 }
SL:ScheduleRepeat(0.016, function()
if not sword then return end
if sword.mode == "orbit" then
sword.ang = sword.ang + 0.134 -- 每帧角步进
sword.loops = sword.loops + 0.016 / LOOP_T
local ax = SL:GetValue("actorX", caster)
local ay = SL:GetValue("actorY", caster) - 74
sword.x = ax + math.cos(sword.ang) * 66
sword.y = ay + math.sin(sword.ang) * 22
SL:DrawSword(sword.x, sword.y, sword.ang)
if sword.loops >= LOOPS then
SL:CancelRepeat()
sword.mode = "strike" -- 第三匝到头:松手
SL:SayAbove(caster, "松手")
end
else
SL:FlySword(sword, SL:GetValue("target"), 900, function(tx, ty)
SL:HitActor(SL:GetValue("target"), DMG_THROAT)
SL:ShowTipAbove(SL:GetValue("target"), "-" .. DMG_THROAT .. " 取喉")
SL:FlashScreen("#a5d6ff", 0.10)
sword = nil -- 剑落账清
end)
end
end)
SL:Cooldown("orbit", 3.2)
end
return OrbitSword
flySword 的速度九百像素每秒——脱手段不给敌人留反应时间;而环绕段每帧零点一三四的角步进就是发条的齿,齿距一变,三匝的手感就全变了。
三、绕匝的演出规格
环绕的轨道是全技能的骨架:椭圆轨道横轴六十六、纵轴二十二——纵轴压扁才有"贴身绕"的缠绕感,正圆绕出来像直升机。剑尾的光带存二十六帧轨迹,越旧的越淡——光带是发条的读数,转速快时光带自然甩得亮。三匝的状态字报在剑客头顶:一匝一报,观众不用数也数得清。脱手段的银线直线不求导、不拐弯——绕了三匝的剑必须走一条最干脆的直线,转折就是泄劲;命中的位置压在喉口高度一百一十八像素——打头不打胸,御剑的礼数是取喉。落地后剑光散作银屑,冷却三秒二。
四、定价与三条剑规
环绕系的定价一句话:三匝两秒二、脱手一瞬——蓄势占全流程九成时长,杀伤压在一成里,时间都花在看得见的发条上。三条剑规:其一,绕匝期可打断——蓄势的两秒二里剑客被击退,剑当场坠地,环绕的风险就是这两秒的站桩;其二,绕满必发不可存——第三匝到头自动脱手,不存在"攒着三匝等下一发双响",发条拧满就要松手;其三,脱手走现坐标——剑离手后按出手的直线飞,途中目标挪位剑不改道,剑的尊严是直线。与圆月剑舞对照着看:同是绕着身子的剑光,剑舞的圈是伤害本身——转到谁谁挨刀;御剑的圈是蓄力——绕的是发条、咬人的只有脱手那一剑,一个把杀伤摊在整圈,一个把杀伤攒在一点,环绕系的两个门派在"圈是刀还是弦"上分了家。
五、蓄势系的镜头学:为什么观众爱数匝数
御剑术最迷人的两秒是绕匝段:观众的眼睛追着剑转,匝数一匝匝涨,紧张感跟着角速度一起爬——蓄势系的天赋是把"等待"演成内容,剑绕得越急,那一剑越值钱。状态字报匝是把这份等待拆成了可数的台阶,数到"第三匝"时全场都知道要出事了——预告到位的爆发比突然的爆发响三倍。对玩家,脱手的时机完全自动,御剑玩的是"什么时候起剑":掐着狼怪扑击的前摇起剑,第三匝绕满刚好迎上它扑到一半的身子——起剑的时机才是这门功夫的手艺。工程收尾记一笔:环绕轨道的中心要跟着剑客的脚下坐标走、不受朝向转向的影响——轨道锁人不锁朝向,剑才绕得像自发的东西,跟着朝向转的轨道像拴绳的玩具。最后留给数值组的一句话:一百二十五对普攻三十二的近四倍,配两秒二的蓄势与三秒二的冷却,账是平的——环绕系的平衡点不在伤害上,在"让玩家觉得绕的每一匝都没白费"。
写完再留一句给做蓄势系技能的同学:蓄势最容易做成"干等一条读条",而它本该是一段值得看的独舞——把蓄力的每一步画在剑上、报在头顶,等待本身就成了演出。
补一个演示彩蛋位:第三匝绕满的瞬间光带会先白一下再脱手——那一白是发条拧到头的信号,脱手的银线从最亮处射出去,蓄与发之间就差这一下提神。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版埋了个越用越错的隐蔽报错:长按的计时不在抬手时清零——第一次长按松手后,秒表没归零,第二次轻轻一点直接被…
【语法算法】 接着抛坑:淡入没播完又来一个淡出,会怎样?答不好的界面都会出事——同一个面板的透明度被两个渐变同时抢,一个往上…
【语法算法】 上一版留了排"齐步走"的图标的隐蔽报错:一排波浪排布的图标同起同落——设计稿上是此起彼伏的波浪,实机上整排图标…
【语法算法】 先抛一个坑:按钮太小点不中,为什么不做大热区?界面上那个二十像素的小圆钮,玩家戳三次中一次——把按钮画大又会破…
【语法算法】 vel=vel math.pow(0.01,dt) ——先拆这一行。击退的全部手感都在这一行的衰减里:初速三百…
【语法算法】 上个月一场闪了全屏的事故成了组里的教材:受击闪白上线第一天,玩家一挨打整个界面白一遍——血条、按钮、聊天框全泡…