【游戏功能】
上周切磋局出了一个至今想笑的画面:战士一张天罗地网把道士网了个正着,结果道士站在网里把药嗑了、把宝宝召了、还打了个"哈哈"——网住的是腿,不是人。这张网在判定上是对的(定身成立),在表现上却是错的(被网者的能动性全在)。今天拆天罗地网,看"束缚"类技能怎么把"动弹不得"四个字做严实。
一、撒网、缠身、挣脱三段
天罗地网的循环三段。撒网段:一张网袋沿抛物线罩向目标——网在飞行中是收拢的,落地瞬间张开罩下,"罩"这个动作要有"兜"的弧度,直线飞过去的网像床单。缠身段:网眼沿目标身位收紧,走路动画整段钉死,头顶挂出挣脱条——束缚的实感来自两处:动作冻结加"网在收紧"的持续小动画(网眼每秒微微抖两下),静止的网贴在身上像贴图,会动的网才是活扣。挣脱段:挣脱条走满,网炸成麻线碎屑,目标解封——注意挣脱条是目标自己的进度:网的总时长写死,但目标被攻击时挣脱条会加速——打得越狠它挣得越快,"网中活靶"是有时限的。三段的核心是"束缚的完整性":腿钉住了,但被网者的其余演出——受击、嗑药、招宝宝——要不要一并封掉,是这个技能的设计分水岭。
完整演示在这,默认自动循环:
fx-nettrap
二、幂尔框架实现:定身与挣脱条
束缚是一个带寿命的状态,挣脱条是它的倒计时:
local NetTrap = {}
local NET_TIME = 2.5
local netting = {}
function SL:ThrowNet(caster, target)
SL:PlayActorAct(caster, "attack")
SL:TossProjectile("net", caster, target, 0.4, function()
netting[target] = { t = 0 }
SL:FreezeMove(target, true) -- 定身: 只钉位移
SL:PlayActorAct(target, "idle")
SL:ShowProgressBar(target, "挣脱", NET_TIME)
SL:ScheduleRepeat(0.016, function()
local nt = netting[target]
if not nt then return end
nt.t = nt.t + 0.016
SL:StepProgressBar(target, nt.t / NET_TIME)
if nt.t >= NET_TIME then
netting[target] = nil
SL:FreezeMove(target, false)
SL:PlayBurst(SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 46, "net_break", 18)
SL:CancelRepeat()
end
end)
end)
end
function SL:OnNettedHit(target)
local nt = netting[target]
if nt then nt.t = nt.t + 0.3 end -- 挨打加速挣脱
end
return NetTrap
FreezeMove 只钉位移——受击闪白、飘字、状态栏全部照常工作。这条边界是演示里那张"网中还能嗑药打哈哈"的翻脸版:网钉腿,其余能动,但演示里我把攻击动作也一并让它做完——被打的一方有反应,网才像网,不像水泥。
三、挣脱条是网的心跳
束缚类技能最怕"定住了但没戏看",挣脱条就是那场戏。条要慢:两秒半的条、匀速走、不闪不跳——它走的是"对方的耐心",快了像倒计时炸弹,慢了像读条挂机。挨打加速要可读:每一刀让条跳一小截、同时网体抖一下——攻击与挣脱的因果一根线连死,玩家的"打不打网中人"就变成一个真选择:打,它早点出来;不打,白拿输出时间。网体的画法走"麻"字诀:交叉网眼用棕色细线手绘、落地收紧时网眼由疏变密、束缚期间保持每秒两次的微颤——网是草麻编的,不是激光笼,材质感全在这些小抖动里。破网的碎屑要"散":麻线断口四散、白色布点混着飞、落地的残线留半秒——破网是束缚的句号,句号要落在地上。
四、束缚的三不原则
定身类技能立三条边界,写进规约。一不死:束缚不附带持续伤害——网就是网,缠住不烧不割,伤害让给别人的刀;附带 DOT 的网会让"网中活靶"变成"网中死刑",控场的定价就乱了。二不叠:网中再网无效——第二张网对已定身目标只刷新时长不刷新条,规矩简单到不用解释;叠束缚的连招收益全部交给队友的伤害技能,控制不复利。三不锁心:目标的朝向照常跟随——它被网住了但眼睛还跟着你转,这条"活"气让束缚的画面对峙感不散:它盯着你,你盯着条,双方都在等那一下"破"。三不之外,网还有一个便宜的进阶演出可选:目标挣脱瞬间给玩家角色一个半拍的后撤小动作——网破如弓弹,捕猎者会被反冲一下——这半拍的谦让让"束缚是博弈"而不是"束缚是刑罚"。撒网、缠身、挣脱三段加上三不原则,天罗地网才是一张讲理的网。
五、网的飞行账与落点脾气
撒网那半秒的飞行也有讲究。网的抛物线弧顶要比火球低——网是"兜"出去的,太高的弧像撒渔网,太低像扔石头,弧顶压在网与目标连线高度的两成上下,"兜"的味道刚好。落点的脾气是这套表现里最值钱的细节:网落在目标当前位置而非预测位置——网是张网,不是子弹,它兜的是"它站在哪",目标半步之前挪开,网就兜空,空网的碎线也要落地——空网有落地的戏,捕猎的实感才成立。演示里狼怪巡逻速度放得慢,就是为了让人看明白:网的命中靠目标自己"走上来",猎人是下套的,不是扔刀的。还有一个跟音效有关的收尾账:撒网一声"唰"、缠身一声闷响、挣脱期间网眼摩擦的窸窣声以极低音量常驻、破网一声脆响——四段四个声源,闭着眼能听完一场完整的捕猎。最后记一笔工程省心处:网的定身只改一个移动开关,巡逻 AI、仇恨、动画状态机全都不用动——束缚做得干净,就是它不碰别人的任何系统。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 上一版埋了个反着来的隐蔽报错:空城纹的疑心标记没清——玩家挂机挂了十分钟回来,怪的破绽还开着,刀刀重击,一看日…
【游戏功能】 接着抛坑:挨打能不能是赚的?前头写过夯土——挨打垒减伤,那是守势的赚法。苦肉纹换个方向赚:挨它一刀,你的下一刀…
【游戏功能】 tk=math.min(3,tk+1) ——先拆这一行。兑票纹的账本全在这一行的封顶里:它每打你一爪,你兜里就…
【游戏功能】 去年秋天的随机事故到现在还是教材:万相纹的初版把随机种子写死在模块顶部——种子固定,掷出的相就固定,一整场打下…
【游戏功能】 再抛一个坑:风声能不能当武器使?你的名声在怪群里传开,是好是坏?寻常的想法里,名声越响围上来的怪越多——全是坏…
【游戏功能】 上一版留了个哭笑不得的隐蔽报错:蛙印跳到了一具尸体上——蛙印的跳迁判定没查存活,第一只怪倒下的那一拍,蛙印照跳…