【游戏功能】
蓄力冲的全机制就一句话:低头蓄力一秒,然后沿直线狂冲——冲程上的怪被撞飞四十点加半秒的懵,冲出界的自己撞墙发懵一秒。今天拆蓄力冲,看"冲撞系"怎么把一秒的蓄力,变成一秒的懵——不是它懵就是你懵。
一、蓄力、起跑、撞飞三段
蓄力冲的循环三段。蓄力段:脚下亮起一条红色的冲刺虚线,虚线的终点画在场子边缘——蓄力段是全技能的预告:虚线画在明面上,线上的怪有时间横跨——虚线是"我要冲了"的公告,公告写得越清楚,跑的人越服气。起跑段:一秒蓄力结束,人沿虚线狂冲,冲速四百八——起跑段是全技能的执行:冲的速度恒定、冲的方向恒定、冲的路径恒定——三个恒定就是直线冲锋的全部纪律。撞飞段:冲程上碰到狼怪,一肩膀顶上去,四十点的"冲撞"大字加半秒的懵——撞飞段是全技能的兑付:撞飞的不只是伤害,还有半秒它站不稳——站不稳就是你的下一步。三段的核心是"冲即撞":蓄力冲不拐弯不修正不停,它只是一条从起点画到终点的冲程——冲程上的每一只怪都在冲程的账上。
完整演示在这,默认自动循环:
fx-chargerush
二、幂尔框架实现:冲撞是一段只认碰撞的位移
蓄力冲的账本就是位移加碰撞判定——
local ChargeRush = {}
local RUSH_SPD = 480
local RUSH_T = 0.6 -- 冲零点六秒
local RUSH_DMG = 40
local RUSH_CD = 5.0
local rush = { tele = 0, t = 0 }
function SL:StartRush()
rush.tele = 1.0
SL:PlayActorAct("self", "cast")
SL:ShowTipAbove("self", "蓄力中")
end
function SL:OnTick(dt)
if rush.tele > 0 then
rush.tele = rush.tele - dt
SL:DrawTelegraph(rush.tele)
if rush.tele <= 0 then rush.t = RUSH_T end
return
end
if rush.t <= 0 then return end
rush.t = rush.t - dt
SL:MoveForward(RUSH_SPD * dt)
SL:ShowDashTrail()
local hit = SL:BodyTouch(30)
if hit then
SL:HitActor(hit, RUSH_DMG)
SL:Stun(hit, 0.5)
SL:PushActor(hit, 60)
SL:ShowTipAbove(hit, "-40 撞飞")
SL:ShakeCamera(5, 0.24)
end
if SL:Offscreen() then
rush.t = 0
SL:Stun("self", 1.0) -- 撞墙:自己懵
SL:ShowTipAbove("self", "撞墙懵")
end
end
return ChargeRush
撞墙自懵是全技能的代价:冲出界的自己懵一秒——蓄力冲的直线不讲绕路,冲出界就是冲的代价。
三、冲撞的演出规格
蓄力虚线是全技能的跑道:红色的虚线从脚下铺出去,虚线的末端画一个冲击箭头——虚线要"画",画出来的虚线才有"我要从这条路冲"的公告感。起跑的加速要"顶":起步的第一帧就有尘土炸开、冲势全程不减——直线冲锋最忌减速,一减速蓄力的一秒就白蓄了。撞飞的反馈要"双份":自己身上的冲撞特效和狼怪身上的被撞特效同帧出——撞飞是两个身体的事,一帧演两份才叫撞。撞墙的懵要"憨":冲出界的自己撞出闷响、头上三颗星转——撞墙的憨是这门功夫的幽默,也是自懵一秒的合法代价。
四、定价与三条冲规
冲撞系的定价一句话:撞飞四十、冲出界自懵一秒、冷却五秒——冲撞的威力全在"撞飞"的位移效果上——位移效果好,伤害四十只是附赠。三条冲规:其一,冲程不拐弯——直线冲锋不修正不追踪,虚线画到哪里就冲到哪里,直线冲锋的尊严是死脑筋;其二,冲程不停——碰到怪不减速不回头,冲程上的怪全都要撞完,直线冲锋不因碰撞而中断;其三,冲完必出界——冲程的终点永远在场地边缘,不出界的冲不是全力冲。与野蛮冲撞对照着看:同是"直线冲撞"的位移,野蛮冲撞是推撞距离的格子探测——用的是格子判定,冲的是位移;蓄力冲是速度恒定的连续位移——冲的是速度不是格子,冲撞系的两个门派在"推格"还是"推速"上分了家。
五、冲撞系的直线学:虚线画到哪里,答案就在哪里
蓄力冲真正教的是"直线冲锋"的站位观:虚线画出来的那一秒,线上的人要横挪、线外的人要准备——虚线画出来之后,场上所有怪的最佳走位都变了。老玩家的用法是把蓄力冲当"开路器"用:人堆里被围了?蓄力冲直接冲出去——冲程上的怪全被撞飞、冲完的出口就是空地。对观战者,蓄力的虚线和冲撞的实线一虚一实的交替是全场最有"预告感"的画面:虚线画的是要走的路、实线撞的是走到路上的怪——虚实切换的那一帧就是冲撞的判决定格。工程收尾记一笔:冲刺的虚线要在蓄力的每一帧都刷新——虚线跟着蓄力的进度从短变长,虚线从短变长的过程就是"蓄力在进行"的可视化,虚线不长玩家不知道你在蓄力。最后留给数值组的一句话:撞飞四十对冲出界自懵一秒,账面是双向的——冲撞系的定价要同时算"撞到的收益"和"没撞到的代价",双向账算平了这门功夫才立得住。
写完再留一句给做冲撞系的同学:直线冲锋最容易做成"一段匀速位移",而它本该是一段从虚线到实线从蓄力到撞飞的完整冲刺——虚线要画得看得见、冲要冲得不停、撞要撞得有震感、懵要懵得有代价,冲刺的全程立住了,玩家的每一刀蓄力才都是有预告的猛冲。
补一个演示彩蛋位:冲撞结束的那一帧,冲刺留下的虚线残影会在地上多停半秒才散——残影多停的半秒是"这条路走过了"的余痕,余痕散了,下一轮的虚线才开始画。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…