【游戏功能】
遁地的开关就这一行:
under = not under
布尔量一翻,人从地面挪进地下。但真把"钻土"做进战斗,这一行翻开之后的事全是功夫:地上的狼还看不看你、地下的你怎么画、破土那一浪怎么掀——遁地术这套"钻进土里"的玩法,拆开看比一行取反热闹得多。
一、钻入、潜行、破土三段
遁地术的三段。钻入:玩家点下遁地,土花炸起一圈,人影沉进地面——沉到只剩一个隆起的土包,土包跟着玩家的位置滑,滑过的地方一路冒土屑,地面的裂线泄露你的走向。潜行:入土三秒,狼怪的爪子照抡不误,爪风从土包上刮过去,只飘一个"抓空"的灰字——地上的判定够不着地下的人,这份"看得见摸不着"是遁地和闪避的分水岭:闪避是挪开,遁地是换了层。三秒里玩家在土里随便挪,狼的追击逻辑当场失灵,它只能绕着土包打转,头顶一个大大的问号。破土:玩家掐着点从狼脚底下炸出来——土浪掀成一圈,近身的狼被掀一个趔趄,"破土"两个字砸在土浪正中——破土不光是回来,还是一次从地底发起的伏击,钻进去是逃,钻出来是打,一套遁地术两头赚。
入土的土花做了两道:第一道是钻下去炸开的,第二道是封土的——土屑落回来在地表堆出一个小包,包顶随着玩家的挪动鼓动,像有活物在底下拱。狼怪对着土包的懵也演出层次:先一爪刨空、再绕着包转半圈、最后头顶挂个大问号原地跺脚——它越急,玩家越乐,遁地术的乐趣一半在狼的反应里。土屑的轨迹也有讲究:玩家往哪挪,土屑就往反方向溅,地面的裂线一路延伸——轨迹是明牌,狼和玩家都在读这张牌。
完整演示在这——点「遁地!」钻进土里遛它,挪到脚边再点「破土!」:
fx-burrow
二、幂尔框架实现:层面切换与判定隔离
幂尔框架里遁地是把单位从"地表层"挪进"地底层",两层判定各自独立:
local Burrow = {}
local UNDER_TIME = 3
function Burrow.Dig()
SL:SetLayer("player", "underground") -- 层面切换: 判定跟着换层
SL:SetState("player", "burrow", UNDER_TIME)
SL:PlayBurst("player", "soil_puff", 14)
SL:ShowTipAbove("player", "遁地!")
SL:RegOnce("burrow_up", UNDER_TIME, function()
Burrow.Emerge(false)
end)
end
function Burrow.Emerge(byHand)
if SL:GetLayer("player") ~= "underground" then return end
SL:SetLayer("player", "ground")
SL:PlayBurst("player", "soil_wave", 18)
SL:RingWave("player", 44, "soil_ring")
SL:ShakeCamera(6, 0.28)
for _, m in ipairs(SL:GetMonstersInRange("player", 110)) do
SL:SetStagger(m, 0.6) -- 破土: 近身者掀翻
SL:ShowTipAbove(m, "掀翻!")
end
if byHand then SL:ShowTipAbove("player", "破土!") end
end
local function onClawHit(claw, target)
if SL:GetLayer(target) == "underground" then
SL:ShowTipAbove(claw, "抓空") -- 地表爪: 够不到地底
return false
end
return true
end
SL:On("claw_hit", onClawHit)
SL:RegClick("dig", Burrow.Dig)
SL:RegClick("emerge", function() Burrow.Emerge(true) end)
return Burrow
层面切换把所有"够不够得着"的问题收进一个字段:爪击回调先问一层,地底的人天然免疫地表判定——比在各处补"如果遁地就 MISS"的补丁干净十倍。
切层还有两条边角要钉死:遁地期间的增益减益各自冻结——地底不吃地表的火,也不吃地表的奶;切场景时若人在地底,按地表层落地结算并补一次破土特效,别让玩家重进战场时还揣着地下状态。破土的掀翻走圆形范围查询,查询半径一百一十和视觉土浪的半径同一个常量——视觉和判定的半径分了家,玩家迟早发现"浪没掀到也翻了我"。
三、三秒的憋气与土包的读法
三秒入土是遁地的全部预算:短了钻进去就得出来,狼的爪刚扬起你就冒头;长了遁地变成潜水,狼群围着土包守株待兔,出来就是送。三秒配破土的掀翻半径一百一十像素:土里挪出的距离刚好够从"它身后"钻到"它脚下",破土的浪才掀得着人。破土的判定只掀近身的——掀翻不是范围技,是"从你脚底钻出来"这件事本身带的冲击,十步外的狼凭什么叫呢。土包的画法也有讲究:土包要随着玩家的挪动滑动、滑动处冒土屑,狼和玩家都读得懂"人在土里往那边去"——完全看不见的潜行是恐怖游戏,看得见轨迹的潜行才是博弈:狼猜你从哪冒头,你猜它防哪边,土包的裂线就是这场哑谜的全部棋盘。最后一条纪律:地底不吃地表的范围火,也不吃地表的治疗——两层各过各的日子,层与层之间只有破土这一扇门。
破土的方向学是进阶课:土里挪到狼的正下方再冒头,掀翻最狠;挪到侧面冒头,狼半个身位就躲开了——冒头的位置和狼的朝向之间的夹角,决定了这一浪是掀翻还是问好。层面系统往下还能长:地底埋的伏击、地下水的暗河、可以挖穿的薄墙,全是同一套两层世界长出来的枝节——遁地术开的是一个维度,不是一个技能。给表现组留一句:地底玩家的音效要闷半度,钻动声隔着土传出来——耳朵先于人确认他在地下,层次感就立体了。遁地术最忌讳的是万能:狼有嗅探的鼻子、火有烧地的能耐,地底不是无敌舱,是三秒的气口——憋得住就赢半局,贪着不出,就闷死在自己挖的坑里。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…
【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…
【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…
【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…
【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…
【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…