【游戏功能】
按住攒盾,盾值就是弹量,松手引爆贴脸的怪——蓄盾爆把"防御"改写成了"蓄弹药":盾攒得越厚炸得越疼,攒盾的两秒里你站桩挨刀,炸盾的一瞬它贴得越近死得越惨。这篇把整套模块拆开:配置表、蓄盾构件、引爆结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:按住攒盾,松手引爆
演示场按住「蓄盾!」:玩家周身的金盾一格格涨——攒两秒盾满十六。怪扑过来贴脸的瞬间松手:盾环炸开,"爆-十六"的金字糊它脸上。手快了一秒就松——盾薄四点,炸也是挠痒。演示里试两种时机:攒满等它贴脸再炸,和它离得远就慌忙引爆——后者空响一声白攒。蓄盾爆玩的是蓄和放的时机:盾是炸弹,手是引信。
fx-wardpop
二、底层原理:一面蓄盾表加一次引爆半径
模块的机关是一对搭档。蓄盾表:按住的那段时间里盾值按秒攒——攒盾认按住不认挨打,站桩的每一秒都是实打实的盾。引爆半径:松手的那一帧盾值化作六十步内的爆炸——盾值就是伤害,一点盾换一点伤。和护盾那类常驻减伤的分野在"盾是弹药不是铠甲":护盾挡刀,蓄盾的盾攒着炸人——攒盾的过程裸奔挨打,炸盾的瞬间才见血。
盾为什么炸完就清零?清零的版本每轮蓄放都是完整的一口一口气,蓄盾变成一蓄一放的呼吸节奏;不清零的版本盾越滚越厚变成无限炸弹,节奏就散了。
三、核心代码:完整模块(上·骨架)
-- @file WardPop.lua
-- 蓄盾爆 —— 按住蓄盾点按引爆
local WardPop = {}
local CONST = {
SHIELD_RATE = 8,
SHIELD_CAP = 16,
BOOM_RADIUS = 60,
COLOR_WARD = "#d09840",
COLOR_DEEP = "#584010",
COLOR_GHOST = "#f4dca0",
ZORDER_WARD = 132,
ZORDER_FX = 135,
AUTOINC_BASE = 1053000,
}
local _shield = 0
local _holding = false
local _wardFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "WDP",
CONST.AUTOINC_BASE + _autoInc)
end
local function GetActorPos(id)
if not id then return nil end
local x = SL:GetValue("ACTOR_POSITION_X", id)
local y = SL:GetValue("ACTOR_POSITION_Y", id)
if not x or not y then return nil end
return { x = x, y = y }
end
local function SafeRemove(node)
if node and not GUI:Widget_IsNull(node) then
GUI:removeFromParent(node)
end
end
local function ShowTip(msg)
if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end
local function PopWard()
local val = math.floor(_shield)
_shield = 0
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if not mp then return end
SL:PlayWardBoomFx(mp.x, mp.y)
SL:ScreenShake(3.4, 0.22)
local hit = false
for _, tid in ipairs(SL:GetAllActorsInView()) do
local tp = GetActorPos(tid)
if tp and math.abs(tp.x - mp.x) <= CONST.BOOM_RADIUS then
SL:ActorHurt(tid, val)
SL:TipAbove(tid, "爆-" .. val)
hit = true
end
end
if hit then
ShowTip("盾爆了——" .. val .. "点糊它脸上")
else
ShowTip("盾爆了——可惜它离得远,空响")
end
end
四、核心代码:完整模块(下·定时器与蓄放结算)
-- 按下:起盾
function WardPop.Press()
if _holding or _shield > 0 then return end
_holding = true
_shield = 0
SafeRemove(_wardFx)
_wardFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Ward"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_wardFx, CONST.ZORDER_WARD)
ShowTip("按住了——盾在攒,攒多少炸多少")
end
-- 松开:引爆
function WardPop.Release()
if not _holding then return end
_holding = false
SafeRemove(_wardFx)
_wardFx = nil
if _shield < 4 then
_shield = 0
ShowTip("盾太薄——引不出响,按满再放")
return
end
PopWard()
end
-- 定时器:盾值上涨与盾环跟脚
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
if _holding then
_shield = math.min(CONST.SHIELD_CAP,
_shield + CONST.SHIELD_RATE * dt)
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if _wardFx and mp then
GUI:setPosition(_wardFx, mp.x, mp.y - 52)
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButtonHold("蓄盾",
function() WardPop.Press() end,
function() WardPop.Release() end)
ShowTip("技能已加载: 蓄盾爆 (调试按钮触发)")
end, 1.0)
function WardPop.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SafeRemove(_wardFx)
_holding = false
_shield = 0
end
return WardPop
五、机制问答
问:攒盾期挨打会散盾吗?
答:不会——盾认按住时长不认干扰,挨打只掉血不散盾,蓄盾的定力和沉刀一个师父教的。
问:盾能攒过十六吗?
答:不能——十六封顶,封顶后继续按是白按,盾满了不炸纯属浪费手劲。
问:炸不到怪盾白爆吗?
答:白爆——六十步的半径就是引信的长度,怪出圈炸了个寂寞,蓄盾的时机课全在距离上。
问:盾爆那下能暴击吗?
答:能——爆炸走正常结算,暴击的盾爆十六变三十二,蓄满暴击是天花板。
问:攒盾期能走位吗?
答:能——盾认按住不认站位,边攒边挪把怪引到六十步内再松手,走位是蓄盾的进阶课。
问:蓄盾期能吃治疗吗?
答:能——盾和血条是两条账,治疗照加,蓄盾的定力不影响吃药的效率。
问:盾攒一半能走位吗?
答:能——盾认按住不认站位,边攒边挪把怪引到六十步内,走位是蓄盾的进阶课。
问:盾爆能触发连锁吗?
答:能——爆圈认位置不认目标数,两只怪都贴脸一起吃,盾爆就成小范围清场。
六、调参指南与商业服怎么用
第四笔是攒速的节奏:每秒八点对两点封顶是两秒的满盾线——攒太快盾变成随手开关,太慢蓄盾变成罚站模拟器。第三笔是引信的半径:六十步对怪的贴脸距离是"贴脸必中"的保险线——半径太小炸成空响,太大成了自带索敌的炮。第二笔是封顶的深度:十六点对十四点挨刀是"比挨刀值"的底线——封顶低于挨刀的版本没人蓄盾,盾的定价要压过怪的爪子。第一笔是盾环的胀感:盾环随盾值一圈圈外扩——环的大小就是弹量,玩家读环就知道这一炸几斤几两。常见坑三个:松手在按钮外没监听,盾攒满了放不出;盾爆的结算漏了无敌帧,无敌怪白吃爆炸;封顶后的蓄盾音效不停,按着白按听着像还在涨。
商业服里蓄盾爆是"引爆师流派"的看家货:别人的盾挡刀,他的盾当炮弹——商城里盾环的样式做成品级,铜环、熔岩环、龙鳞环,盾环胀满炸开的那一圈金光就是引爆师的开炉炮。运营落地还有两笔:一段是引信教学——教一句"让它贴脸再松手",流派第一课是胆量;一段是引爆榜——按单次盾爆的最大伤害排名,蓄得最满的人有碑。变体做成连环蓄盾:爆完的余波给下一轮蓄盾提速——炸得越准下一盾攒得越快,引爆师的循环越滚越顺。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
引爆师的老话只有一句:盾满不炸,白按两秒。
引爆师的第二课:盾不满炸是浪费,怪贴脸不炸是自杀,两秒的分寸全在引信上。
引爆师的第三课:盾值封顶后多按一秒,就多送怪一秒的输出。
引爆师的压箱句:盾环转满的时候,它已经晚了。
写完留一句给做蓄能系的同学:蓄盾爆卖的是"防御是蓄着的进攻"——那圈胀到十六点才敢松手的盾环,是把挨打的两秒锻造成一面炸弹的锻造法。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 磁点一开,它的箭全拐——四秒里它射出的每一支箭都拐向同一个聚点,到了聚点整支碎掉,一支都够不着你。磁引把"躲箭…
【游戏功能】 半场一摆两秒一趟的钟摆,砸中站线上的一切——包括被你引过去的怪。钟摆把"地形"变成了武器:它本身不认敌我,你引…
【游戏功能】 两键同按零点一五秒内——铰击:两把刃铰在一起砸它二十,外加半秒的僵。单按一键只有十点白给。这篇把整套模块拆开:…
【游戏功能】 三只怪三角连着链:死一只,另外两只各挨十五;链上再倒一只,最后那只又挨十五——三环扣把"清怪"变成了"连环",…
【游戏功能】 按住攒盾,盾值就是弹量,松手引爆贴脸的怪——蓄盾爆把"防御"改写成了"蓄弹药":盾攒得越厚炸得越疼,攒盾的两秒…
【游戏功能】 按对 劈→刺→扫 三键,一记四十;按错一环,只值八点平砍。三键诀把连招的顺序做成了考卷:三枚键摆在你面前,顺序…