【游戏功能】
一、一次只有挨打没有还手的守势
守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡做得很漂亮,金环呼吸、刀刀弹开,但格挡结束怪物继续围殴,玩家的处境和没按技能之前一模一样。守势技能的设计公式是两拍:先挨后还。格挡拍吸收伤害给玩家一个"稳住了"的瞬间,顿挫零点二秒给玩家一个"要反击了"的预感,反击拍把近身目标全部掀翻——缺了第二拍,守势就只是个带特效的挨打按钮。
二、机制原理:格挡环、顿挫、反击波
三段结构的时序是零点五五加零点二加零点五。格挡拍:金色呼吸环撑在角色周身,环的存在期间范围内怪物的攻击全部被弹开,弹开配"挡"字提示——格挡拍的意义是收集"围攻"这个戏剧前提。顿挫拍:金环消失后的零点二秒空窗,什么都没有发生——这半秒的安静是反击的前摇,玩家的期待被空窗拉满。反击拍:金色冲击波以角色为圆心炸开外扩,波前扫过的近身目标全部被沿径向掀飞加受击,掀飞方向从圆心向外——"以我为中心的清算"是守势反击的标准叙事。
fx-shieldburst
三、正确写法:两拍守势(幂尔版)
local GuardBurst = {}
local CONST = { MSG_ID = 12060, KEY = "GuardBurst", GUARD = 0.55, GAP = 0.2, RADIUS = 160 }
function GuardBurst.Cast(myID)
local myX = SL:GetValue("ACTOR_POSITION_X", myID)
local myY = SL:GetValue("ACTOR_POSITION_Y", myID)
-- 第一拍: 格挡金环
GuardBurst._guard = CreateGuardRing(myX, myY)
GuardBurst._guard:Breath(CONST.GUARD)
-- 顿挫 + 第二拍: 反击波
SL:ScheduleOnce(function()
GuardBurst._guard:Remove()
GuardBurst._burst = CreateBurstRing(myX, myY, CONST.RADIUS)
PlaySound(SND_GUARD_BREAK)
local list = SL:GetValue("FIND_IN_VIEW_MONSTER_LIST") or {}
for _, id in ipairs(list) do
local mx = SL:GetValue("ACTOR_POSITION_X", id)
local my = SL:GetValue("ACTOR_POSITION_Y", id)
if math.sqrt((mx - myX) ^ 2 + (my - myY) ^ 2) <= CONST.RADIUS then
local a = math.atan2(my - myY, mx - myX)
SL:SendLuaNetMsg(CONST.MSG_ID, id, math.cos(a) * 240, math.sin(a) * 130,
SL:JsonEncode({ key = CONST.KEY, op = 2, knock = 1 }))
end
end
-- 广播给旁观者
SL:SendLuaNetMsg(CONST.MSG_ID, 0, 0, 0,
SL:JsonEncode({ key = CONST.KEY, op = 1, actorID = myID, x = myX, y = myY, r = CONST.RADIUS }))
end, (CONST.GUARD + CONST.GAP) * 1000)
end
-- 被掀飞方: 收到方向向量做击退
SL:RegisterLuaNetMsg(CONST.MSG_ID, function(msgID, p1, p2, p3, msgData)
local d = SL:JsonDecode(msgData)
if d.key ~= CONST.KEY or d.op ~= 2 then return end
local m = FindActor(msgID)
if m then m:Knockback(p1, p2, 0.4); m:PlayStagger() end
end)
return GuardBurst
四、四个必须钉死的细节
五、老手再看一眼
SL:ScheduleOnce 在守势里的用法是"定时器当节拍器":格挡时长加顿挫就是反击的触发时刻,一次调度自然销毁。配上 SL:SendLuaNetMsg 的方向参数透传(p1 p2 直接扛向量),框架的两板斧就把"先挨后还"的整个流程钉在了消息时间轴上。守势类技能的模板从此定形:格挡环、ScheduleOnce、反击波——三行骨架,换皮无限。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、先抛一个坑 同样是"放一片技能特效",为什么有的游戏炸二十个火球丝般顺滑,有的游戏炸五个就掉帧?直觉答案"…
【游戏功能】 一、一个职业选手的操作拆解 看高手第一视角录像,最费解的操作是:他打一下、退两步、再打一下,全程像在跳一支排练…
【游戏功能】 一、一个被浪费的冰冻 组里新人做了个冰法连招:冰冻命中后立刻接大火球,理论伤害翻倍。试玩却怪怪的——冰冻刚套上…
【游戏功能】 一、一次吓到自己的召唤 召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地…
【游戏功能】 一、先抛一个坑 领域类技能最怕做成"一次性特效放完拉倒":冰环扩一圈、冻一下、结束——站在领域里的怪第二秒解冻…
【游戏功能】 一、一次只有挨打没有还手的守势 守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡…