【游戏功能】
战斗日志里躺着一条隐蔽的错:height expected, got nil,出在狼怪扫腿的判定帧。追下来哭笑不得——滑铲上线后,玩家的高度字段只在站立时维护,铲下去的一瞬高度读成了空,扫腿的判定拿空高度去比,当场哑火。表面看是修一个空字段,往深看是"低身状态"这个概念从来没进过高度系统。滑铲步这套"贴地穿过"的玩法,拆的就是高度这一维。
一、亮线、贴地、穿过三段
滑铲步的三段全在一条线内外。亮线:狼怪起手扫腿,前摇半秒,一条绿色的虚线从狼爪拉到玩家膝盖的高度——这条线就是扫腿的轨道,打的是站立者的膝盖,线的存在本身就是提示:这招打站着的,不打的。贴地:绿线亮起的半秒里点滑铲,玩家侧身贴地铲出去——身影压到贴地的高度,一路铲出两道土痕,半秒内从狼怪的正面滑到它身后。穿过:扫腿落下来的时候,玩家早就不在膝盖的高度上——扫空的灰字从狼怪头顶飘起,它前爪拄地晃了半拍,旧力收不住,硬直白白送出零点八秒。滑铲的妙就妙在这:它不躲这一扫,它把身体压进了这一扫的轨道之下——狼扫它的,我铲我的,两条轨迹在同一个空间里错身而过,谁也没碰着谁。
铲姿的画法用了半透:玩家压低之后身影淡到五成多,贴着地面平移,身后拖两道土痕——半透不是偷懒,是速度的表现:铲得越快,人影越淡。土痕的密度跟着滑速走,起步密、收尾疏,一条痕的浓淡就是这一铲的速度曲线。铲到狼怪身后的落点也画了标记:落定的一瞬脚下闪一圈绿环——穿过要有落定的仪式,不然玩家的眼睛还留在起铲的地方。
完整演示在这——点「引它扫腿」,绿线一亮就点「滑铲!」:
fx-slide
二、幂尔框架实现:高度维度与低身状态
幂尔框架里每个单位带一个高度字段,扫腿和滑铲都在这同一根轴上做文章:
local Slide = {}
local SLIDE_TIME, LOW_H = 0.5, 20
function Slide.Go()
SL:SetHeight("player", LOW_H) -- 压低: 高度轴降到二十
SL:SetLowProfile("player", true)
SL:Dash("player", "forward", 180, SLIDE_TIME, function()
SL:SetHeight("player", 96) -- 起身: 恢复站立高度
SL:SetLowProfile("player", false)
SL:ShowTipAbove("player", "铲过!")
end)
SL:PlayBurst("player", "slide_dust", 8)
end
local function onSweepHit(monster, target)
local tH = SL:GetHeight(target)
if tH and tH < 40 then
SL:ShowTipAbove(monster, "扫空") -- 扫腿轨道: 高于低身
SL:SetStagger(monster, 0.8) -- 旧力收不住: 白送硬直
return false
end
SL:Damage(target, 18)
return true
end
SL:On("sweep_hit", onSweepHit)
SL:RegClick("slide", Slide.Go)
return Slide
那口 height 为空的报错,答案是 SetHeight 和 SetLowProfile 分了两处维护——高度轴上状态只有一个真相来源,压低和恢复都走同一个字段,空值就没地方冒。
铲的距离走统一的突进通道,撞墙截停、截停即起身——突进通道里现成的碰撞逻辑全部继承,滑铲不用重写一套墙判定。低身期间玩家的受击框高度同步压到二十,别的扫腿类攻击再扫过来也照扫空——低身不是"只防这一招",是"高度轴上真的低了",状态改得彻底,玩家的身体记忆才作数。
三、轨道的可视与硬直的馈赠
绿线的半秒前摇是滑铲的全部公平所在:轨道画出来,玩家才知道"这一扫从哪来、多高、往哪去"——读得见的轨道才躲得开,看不见的前摇纯拼背板。半秒对人类反应链路刚好:看见亮线、判断、按铲,一气呵成。铲的距离一百八十像素是第二个数:刚好从狼的正面滑到身后,滑短了还在爪下,滑长了冲过头撞墙——距离和狼的体宽绑定,铲的是"一个身位"不是"一段距离"。扫空的硬直零点八秒是这套玩法的赏钱:狼的旧力收不住,踉跄半拍,玩家的反打窗口从这里开始算——铲过去不图伤害,图的就是这半秒和身后的位置。硬直里它转身慢,玩家可以从容绕背、喝药、或者再引下一腿。和闪避的分账最后划一道:闪避让轨迹落空在原地,滑铲让身体从轨迹底下穿过去,一个是"我不在",一个是"我在但够不着"——高度这一维被玩法用起来之后,整个战斗系统就多了一层上下左右的戏。
扫空硬直的零点八秒是滑铲的赏钱,赏钱要会花:绕背补刀、拉开距离、再引一腿,三种花法对应三种打法——硬直存在的意义不是让人发呆。连铲的分寸也要定:滑铲冷却一秒四,狼怪的扫腿间隔两秒上下——理论上可以铲铲相接,但铲的耐久不在冷却上在腿上,连铲三把玩家的移速衰减一截——身体会累,这个累写进衰减表,滑铲才不会退化成代步工具。最后和翻滚类闪避分账:翻滚是万金油的躲,滑铲是只对扫腿类攻击的专精躲——专精换更高的回报(穿身加硬直),万金油保下限,两样并存,玩家的选择才有味道。绿线亮起的半秒是这套玩法全部的戏剧张力——线是约战书,铲是应战书,扫空那一声闷响,就是这场哑谜的掌声。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…
【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…
【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…
【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…
【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…
【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…