【游戏功能】
cloud.t = cloud.t - dt——一行倒计时代码,管着一团毒雾的生死:毒云挂在头顶漂,十秒后自动散——站在下面的每秒掉六,躲开的就是安全区。今天拆毒云,看"漂移系"怎么把一团不动的雾,变成一场全场地追着跑的恶梦。
一、聚雾、漂移、掉血三段
毒云的循环三段。聚雾段:符纸一挥,一团绿色的毒雾从半空凝出来,雾团不大但浓——聚雾段是全技能的宣告:毒云不是一次性的弹道,它是一个会持续存在的区域——从这一刻起,头顶多了一团阴魂不散的绿。漂移段:毒雾开始慢慢漂,漂的速度不快但方向不停——漂移段是全技能的追猎:它不追人但它在动,你跑它跟着漂,你站它就罩你——慢漂比快追更让人心烦。掉血段:站在毒雾正下方的人每秒掉六——掉血段是全技能的结账:六点不多,但一秒一秒地掉,不掉到安全区就一直掉。三段的核心是"雾即区域":毒云不是技能弹道,它是一块漂浮的有毒区域——区域会漂、会过期,但存在期间它就是法律。
完整演示在这,默认自动循环:
fx-poisoncloud
二、幂尔框架实现:毒云是一块带漂移的区域
毒云的账本就一个漂移坐标加一个倒计时——
local PoisonCloud = {}
local CLOUD_LIFE = 10.0 -- 毒云十秒
local DRIFT_SPD = 12 -- 漂移速度
local DPS = 6 -- 每秒六点
local CLOUD_R = 55 -- 毒雾半径
local cloud = { x = 0, drift = 0, t = 0 }
function SL:CastCloud(x)
if cloud.t > 0 then return end
cloud.x = x
cloud.drift = math.random() < 0.5 and -DRIFT_SPD or DRIFT_SPD
cloud.t = CLOUD_LIFE
SL:ShowTipAbove(x, "毒云")
end
function SL:OnTick(dt)
if cloud.t <= 0 then return end
cloud.t = cloud.t - dt
cloud.x = cloud.x + cloud.drift * dt
if cloud.x < 120 then cloud.drift = math.abs(cloud.drift) end
if cloud.x > 540 then cloud.drift = -math.abs(cloud.drift) end
if SL:ActorInCloud("self") then
SL:TickDamage("self", DPS) -- 每秒跳一次
end
end
return PoisonCloud
漂移加反弹是全技能的场地感:drift 碰到边界就反向——毒云不是静止的靶子也不是追踪弹,它是一个在来回漂的活区域。
三、漂移的演出规格
毒雾是全技能的脸面:五层叠加的绿雾悬浮在半空,每层微微错位,雾团的边缘在呼吸——毒雾要有"层",五层叠加的浓淡才是毒,一层单色的绿只是染色。掉血的绿字要"密":每秒一跳六点的绿字从雾底冒出——密而小的绿字是毒的口感,大字一跳反而是火。漂移的速度要"匀":不快不慢、不追不逃——毒云的漂是不带感情的,它不急着追你,但你跑到哪它都迟早漂到。毒雾下面的地面要"洇":一圈淡绿的水渍印在地面——地面上的绿渍是"你在下面"的标记,头顶的雾和脚下的渍一上一下同时提醒你。
四、定价与三条云规
漂移系的定价一句话:十秒一云、每秒六点、漂速十二——伤害不重但时间长,毒云的威胁全在"它不走"三个字上。三条云规:其一,云不追人——漂移方向固定、碰壁反弹,它不是追踪弹,你不主动撞它它也漂不到你面前;其二,云可叠加可覆盖——两张毒云落在同一位置,取浓不取叠加,毒的浓度有上限;其三,出圈即断毒——走出雾底六点的掉血当场停,毒是按秒结的,出圈就结清。与留焰对照着看:同是"地上有毒的区域",留焰是贴地的火径——从地上烧,封的是地面路线;毒云是半空的雾——从头顶罩,封的是你站的位置,区域系的两个门派在"封地面"还是"封头顶"上分了家。
五、漂移系的追猎学:它不追你,但你跑不出它的射程
毒云真正恶心的地方是"漂移"两个字的含义:它的速度只有十二——比你走路慢——但它永不停止——你停下来吃一顿饭的工夫它就漂到你脚下了。这门功夫逼着玩家做一道持续的选择题:现在站的位置安不安全?三秒后毒云漂过来安不安全?每一秒都在算距离,每一步都在避开雾心。老玩家的解法是把毒云当"活的地形"用——毒云在左边就往右打,毒云漂右边就往左撤——不跟雾斗,跟雾共舞。对观战者,毒雾慢慢漂向狼怪、狼怪毫无察觉地走进去的那一幕,是全场最有"宿命感"的画面。工程收尾记一笔:毒雾的漂移要在碰壁时加一个半秒的缓冲——碰壁立刻反弹像弹球,碰壁停半秒再反向才像雾在"犹豫要不要继续漂"。最后留给数值组的一句话:六点一秒对十秒的漂移,总伤六十——单看不高,但加上"逼它走位"的隐性价值,这团雾的账面就不止六十了。\r\n\r\n毒云的漂移还有一手配风的进阶用法:如果场上有风场把毒雾往狼怪的方向吹,漂速加快一倍——风推雾走,雾追着怪跑。两个技能叠在一起,等于活的地形活了第二次——毒云自己不追人,但风可以替它追。
写完再留一句给做漂移系的同学:移动区域最容易做成"一个匀速移动的圆",而它本该是一团会呼吸会犹豫的活毒雾——雾要有层次、漂要有惯性、碰壁要犹豫半秒,毒雾活了,玩家才肯追着它的漂移轨迹跑全图。
补一个演示彩蛋位:毒云碰到墙壁反弹的一瞬,雾团的边缘会先卷一下再展开——卷的那一下是雾在犹豫"要不要走回头路",看得懂卷边的人,已经提前站到了下一轮漂移的落点上。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…