【游戏功能】
有玩家的道具栏里躺着一面怎么都找不回的盾——日志翻了半天才发现,盾掷出去之后回程的弧线算错了半屏,落点飘到画面外去了,只好整轮重做。飞盾的教训就记在这条弧线上:脱手的盾会绕回来,接不住砸自己。今天拆飞盾,看"回收系武器"怎么把一面盾演成一场有来有回的戏。
一、脱手、空手、接回三段
飞盾的循环三段。脱手段:盾离手直奔狼怪,砸在它脸上二十六点,迸一串金屑——脱手的半秒要干脆,盾是画出去的一笔直线,出手没有半分留恋。空手段:盾弹上弧线往回绕,玩家头顶的"盾在手"熄成"空手期"——空手期是全技能的心跳:这段时间挨刀从十点涨到十八点,格挡的庇护跟着盾一起在天上飞——空手段的紧张不来自狼怪变强,来自玩家自己把保命的东西扔了出去。接回段:盾贴着一道弧线绕回手边,接住的一瞬金光一闪、头顶跳出"接住"二字,格挡当场回槽——接回段是整场戏的句号:盾回来了,账平了,又可以掷下一轮。三段的核心是"手上有盾才有底":飞盾掷出去的是盾,压上去的是心跳。
完整演示在这,默认自动循环:
fx-shieldtoss
二、幂尔框架实现:盾的位置是一段三折的旅程
盾的去、弹、回是三个相接的航段:
local ShieldToss = {}
local TOSS_DMG = 26
local GUARD_HIT = 10 -- 手里有盾挨的刀
local BARE_HIT = 18 -- 空手挨的刀
local RETURN_T = 1.45 -- 去加回的总时长
local shield = nil -- { phase = 1去 / 2弹 / 3回, t, ... }
function SL:CastToss(caster, target)
if shield then return SL:ShowTipAbove(caster, "盾还在外头") end
SL:PlayActorAct(caster, "attack")
shield = { phase = 1, t = 0 }
SL:ScheduleRepeat(0.016, function()
shield.t = shield.t + 0.016
if shield.phase == 1 and shield.t >= 0.42 then -- 命中转弹墙
SL:HitActor(target, TOSS_DMG)
shield.phase, shield.t = 2, 0
shield.bx = SL:GetValue("posX", "shield")
elseif shield.phase == 2 and shield.t >= 0.43 then
shield.phase, shield.t = 3, 0 -- 弹墙转回程
elseif shield.phase == 3 then
local k = math.min(1, shield.t / 0.6)
SL:FlyShieldHome(caster, k) -- 弧线回手
if k >= 1 then
shield = nil
SL:GlowAt(caster, "#e3b341") -- 接住的金光
SL:ShowTipAbove(caster, "接住")
end
end
end)
SL:Cooldown("shieldtoss", 4.5)
end
function SL:OnPlayerHit(dmg) -- 挨刀先查盾在哪
if shield then return BARE_HIT end
return GUARD_HIT
end
return ShieldToss
三段航段的接缝最要紧:每一段用自己的起点坐标续航——上一段的终点就是下一段的起点,坐标一接错,弧线就成了玩家的那句"盾找不回来了"。
三、回程的演出规格
盾的三个航段三副表情:去程是直线加金色拖尾——直线是杀气;弹墙段盾身自转、轨迹上扬——转起来的盾才像被弹开的实物;回程是一道下坠的弧线加细碎光点——回程要慢出去程半拍,慢的那半拍就是空手期的煎熬。盾在手时贴在左臂微微反光,掷出后左臂的位置空出一个暗色的影子——手上有没有盾,看一眼臂弯就知道。接住的两件套:金光一闪加"接住"二字,闪要小、字要快——接住是日常,不是狂欢。空手期的玩家轮廓要比平时暗一成——格挡不在,连人的精气神都暗了,这个暗是给玩家的提示灯。
四、定价与三条盾规
回收系的定价一句话:掷出二十六、空手八秒疼、四秒五一轮——飞盾的输出平平,它卖的是"有盾时挨十点、空手挨十八点"这八点的差价,会算账的玩家都在空手期绕着走。三条盾规:其一,盾飞期间掷不出第二面——家里没有余盾,掷盾的节奏就是全技能的节奏;其二,接住不看走位看弧线——盾认抛物线不认人,玩家挪了位盾照样飞向出手点,接不住是你自己站歪了;其三,盾毁人挨全价——盾被击飞在外的最后一刻被打碎,回程段作废,格挡四秒五秒后重铸——回收系的保底必须有被撕开的一天。与反射盾对照着看:同是拿盾做文章,反射是原地挨打弹伤害——盾是城墙;飞盾是主动脱手画弧线——盾是回旋镖,盾系的两个门派在"守着用还是掷出去"上分了家。
五、回收系的风险学:扔出去的东西才是自己的软肋
飞盾真正设计的是空手期那一段的心跳:输出和保命长在同一面盾上,掷出去的每一秒都在透支防御——回收系武器把"风险"从一个抽象名词变成了看得见的左臂空影。玩家的进退全在盾的弧线上:狠人就掷完立刻贴脸换输出,稳人等接住才挪步,一面盾照出两种打法。对观战者,盾的弧线就是全场的呼吸线:盾在空中,所有人都知道这位现在脆。工程收尾记一笔:回程弧线的落点要锁出手瞬间的手部坐标,不锁玩家的实时坐标——人可以在接盾前挪两步,盾在空中认死理,落地差半步就算脱手落地再捡,那半步的踉跄是玩家该付的学费。最后留给数值组的一句话:八点挨打差价配上四秒五的空窗,账是平的——回收系的账面永远不如普攻好看,它收的是心跳税。
弹墙那一撞也值得单独说:撞点越远,回程的弧就甩得越高——观众从弧线的天花板读出这一掷的力道,弧顶擦着画面上沿的掷盾,比贴地滚回来的气派得多。弹墙点不是随便选的,是盾替玩家探出来的一把尺:它离你几步、墙在哪、下次站位往哪挪半步,全写在那道弧里。
写完再留一句给做回收系武器的同学:扔出去还能回来的武器,卖点从来不是那一下砸击,是空手期的这几秒——把"没有盾的自己"演清楚了,接住的那一瞬才有分量。
补一个演示彩蛋位:空手期挨刀的瞬间,左臂的暗影会抖一下——空的刀鞘也会疼,这一下小动作比任何提示都提醒玩家:盾不回来,你就一直这么脆。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版埋了个越用越错的隐蔽报错:长按的计时不在抬手时清零——第一次长按松手后,秒表没归零,第二次轻轻一点直接被…
【语法算法】 接着抛坑:淡入没播完又来一个淡出,会怎样?答不好的界面都会出事——同一个面板的透明度被两个渐变同时抢,一个往上…
【语法算法】 上一版留了排"齐步走"的图标的隐蔽报错:一排波浪排布的图标同起同落——设计稿上是此起彼伏的波浪,实机上整排图标…
【语法算法】 先抛一个坑:按钮太小点不中,为什么不做大热区?界面上那个二十像素的小圆钮,玩家戳三次中一次——把按钮画大又会破…
【语法算法】 vel=vel math.pow(0.01,dt) ——先拆这一行。击退的全部手感都在这一行的衰减里:初速三百…
【语法算法】 上个月一场闪了全屏的事故成了组里的教材:受击闪白上线第一天,玩家一挨打整个界面白一遍——血条、按钮、聊天框全泡…