【游戏功能】
拆一行代码:
SL:PlayFlyFx("spark_shot", gunX, gunY, barrelX, barrelY, 520, nil, OnHit)
一颗火花飞向火药桶,命中回调里炸开整片天——火药桶阵的机关全在这一行的回调链上。今天讲"环境武器"的表现:桶不是技能,是舞台;点火的子弹才是技能。桶把伤害放大了十倍,也把表现的难度放大了十倍。
一、抛桶、诱敌、引爆三段戏
火药桶阵的剧本三段。抛桶段:桶从人物手中抛出,抛物线高抛、空中自转、落地滚动半圈停稳——落点要在狼怪巡逻的必经之路上,桶落地的位置就是伏击圈圆心。诱敌段:引线点燃,火星噼啪、虚线警示圈淡淡铺开——这个圈是给观众的读盘提示:狼怪进圈的那一刻,全场都在等那一枪。引爆段:一发火花子弹飞进桶身,爆炸瞬间白橙闪光吞掉半屏、双层冲击环贴地滚出、木屑混着火星向四面炸开、狼怪被掀翻在地。三段的节奏是"慢—更慢—瞬间":抛桶慢条斯理,诱敌屏息凝神,引爆一瞬到位,反差越大,那声轰越值钱。
完整演示在这,默认自动循环,可调爆炸半径:
fx-barrel
二、幂尔框架实现:抛物线桶与命中回调
桶走抛物线,子弹走直线,各自独立、用回调衔接:
local BarrelTrap = {}
local KEY = { TOSS = 0.9 }
function BarrelTrap.Toss(self_, bx, by)
SL:PlayActorAct(self_, "cast")
local sx = SL:GetValue("actorX", self_) + 20
local sy = SL:GetValue("actorY", self_) - 56
SL:PlayFlyFx("powder_barrel", sx, sy, bx, by, KEY.TOSS,
{ arc = 90, spin = 5 },
function()
SL:SetValue("barrelReady", true)
SL:PlayFxAt("wick_lit", bx, by - 26)
SL:PlayGroundFx("danger_ring", bx, by,
SL:GetValue("blastRadius"))
BarrelTrap.Lure(bx)
end)
end
function BarrelTrap.Lure(bx)
-- 引狼入圈: 目标走向桶位
local target = SL:GetValue("curTarget")
SL:MoveActorTo(target, bx + 70, SL:GetValue("actorY", target))
-- 目标进圈后开火
SL:Schedule(function(dt)
local tx = SL:GetValue("actorX", target)
if math.abs(tx - bx) < SL:GetValue("blastRadius") * 0.7 then
SL:UnSchedule("lureWatch")
local sx = SL:GetValue("actorX", SL:GetValue("selfActor")) + 22
local sy = SL:GetValue("actorY", SL:GetValue("selfActor")) - 56
SL:PlayFlyFx("spark_shot", sx, sy, bx, by, 520, nil, function()
SL:PlayFxAt("barrel_boom", bx, by)
SL:ScreenShake(0.4, 7)
SL:FlashScreen("#ffd9a0", 0.2)
SL:DeductHp(target, 45)
SL:ShowHitNum(target, 45, "boom")
SL:PlayActorAct(target, "stuck")
SL:SetValue("barrelReady", false)
end)
end
end, 0.016, "lureWatch")
end
return BarrelTrap
回调链三层套一层,每一层的落点参数都要在闭包里带对——回调里取实时坐标是常见翻车点,桶的位置要用落定时的快照。
三、半径圈与炸后的余烬
虚线警示圈的透明度要压到零点二以下——它是给观众的,不是给玩家的 UI,亮了就穿帮。爆炸半径滑块联动三层:预警圈、冲击环、伤害判定圈,三层同心同径,观感与判定完全一致。爆炸后地面要留一圈焦痕慢慢淡去,再飘两三缕余烬火星——炸完就干干净净等于没炸过,焦痕是爆炸的收据。狼怪被掀翻的姿势也有讲究:翻滚方向必须沿冲击波径向向外,逆着炸翻回去,物理老师第一个不答应。木屑粒子用深棕色方片,火星用亮橙细线,两套粒子混着飞,层次立刻分明。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 治疗术的流派里吵了几十年的架:瞬发治疗保当下,持续回血养节奏——回春术是后一派的掌门。回春的机制是一层温火:焐…
【游戏功能】 血条的分配学里有个扎心的现象:满血的人和一丝血的人站在同一道箭雨里,狼怪的爪子永远优先够着后者——血量不均是队…
【游戏功能】 隐蔽的报错单上写着一行怪数据:同一个技能,伤害记录在六十三和四十四之间跳——查了半天配置表,两套数值都"没配错…
【游戏功能】 治疗量的统计表上有一栏常年被无视:溢出治疗——奶到满血之后白白流掉的那部分。溢疗的机制把这栏捡了回来:满血再奶…
【游戏功能】 群攻技能的尴尬人人都懂:三只狼站得东一只西一只,六百点的群符砸下去只烧到一只——剩下两只在火圈外看得清清楚楚。…
【游戏功能】 if seal.t <= 0.4 then dmg = dmg 2 ——一行卡着符印尾巴翻倍的判定,养出了压哨…