CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战游戏功能996引擎

毒雾弥漫:站在里面就一直掉血

2026-09-28 02:31 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战游戏功能996引擎

【游戏功能】
一、一场看不见的持续掉血

毒雾地形上线首日,客服工单出现高频词:"莫名其妙掉血"。玩家明明站在空地上,血条却一格一格往下走——毒雾池的判定椭圆比画面大一圈,视觉边缘站着的玩家全在判定里。反过来还有一拨人站在雾里不掉血,那是个更蠢的原因:判定用的中心点算了两次偏移。持续伤害区域这类功能,画面和判定必须是同一份数据画出来的,否则玩家眼中的世界和逻辑眼中的世界就是两个世界。

二、机制原理:区域是持续的,伤害是节拍的

毒雾的三层结构:底层是地面渐变色池加一条虚线翻涌边,永远画在角色脚下——它属于地面层,人站在雾里而不是雾糊在脸上;中层是气泡,从池内随机点生成、贴地翻涌着缓慢上升,密度由浓度参数控制,观感像雾在呼吸;顶层是状态标记,角色在判定内时身上罩一层淡绿光并按节拍掉血——每秒一跳,弹出绿色负数。伤害按秒结算而不是每帧扣,帧率高低只影响画面细腻度,不影响掉血节奏,这是持续伤害的铁律。

demo
fx-poison

三、正确写法:持续伤害区(引擎侧)

lua
local poisonZone = {}

function poisonZone:Init(x, y, radius)
    self._x, self._y, self._r = x, y, radius
    self._flat = 0.5                                -- 椭圆压扁比: 判定绘制同源
    self._node = CreatePoisonGround(x, y, radius)   -- 地面层
    self._node:AddToLayer(GROUND_LAYER)
end

function poisonZone:Contains(actor)
    local dx = actor:GetX() - self._x
    local dy = (actor:GetY() - self._y) / self._flat
    return math.sqrt(dx * dx + dy * dy) <= self._r
end

function poisonZone:Update(dt)
    for _, actor in ipairs(scene:GetActors()) do
        if self:Contains(actor) then
            actor.poisonAcc = (actor.poisonAcc or 0) + dt
            if actor.poisonAcc >= 1 then            -- 每秒一跳
                actor.poisonAcc = actor.poisonAcc - 1
                actor:ApplyPoison(8)
                actor:ShowPoisonAura()              -- 中毒状态罩
            end
        else
            actor.poisonAcc = 0                     -- 出去立刻清零
        end
    end
end

四、四个必须钉死的细节

  1. 椭圆参数一份两用:判定还原时除压扁比、绘制拉伸时乘压扁比,两处必须引用同一个常量,写两遍就是两处日后对不上的伏笔。2. 伤害节拍用累计器走真实时间,暂停、卡顿、掉帧都不多扣不少扣;离开区域清零,回来重新计时,别让半秒的误入也吃满一跳。3. 气泡粒子走池,毒雾是长驻特效,从开图存在到切图,每秒新建粒子的写法挂机一小时就把池打穿了。4. 中毒状态罩跟角色走不跟区域走,它表达的是"谁在掉血",不是"哪里有毒"。

五、心法:区域表现是一场长期驻军

毒雾、岩浆、沼泽、圣光祝福区,这类持续区域特效和一闪而过的技能特效是两种生物:它们常驻、低调、按节拍工作,画面的存在感越弱、规则的确定性越强,做出来就越像"地形"而不是"特效"。判定同源、伤害节拍、状态外显,这三件事做齐,玩家从雾里跑出来的那一步血条停跳,信任就建立了。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战游戏功能

同屏二十个火球:炸得多不如记得清

【游戏功能】 一、先抛一个坑 同样是"放一片技能特效",为什么有的游戏炸二十个火球丝般顺滑,有的游戏炸五个就掉帧?直觉答案"…

2026-09-28 05:27 996 技术组
进阶实战游戏功能

走砍微操:打一下退两步的朝向账

【游戏功能】 一、一个职业选手的操作拆解 看高手第一视角录像,最费解的操作是:他打一下、退两步、再打一下,全程像在跳一支排练…

2026-09-28 05:27 996 技术组
进阶实战游戏功能

冰住再补一刀:控制技能的输出窗口

【游戏功能】 一、一个被浪费的冰冻 组里新人做了个冰法连招:冰冻命中后立刻接大火球,理论伤害翻倍。试玩却怪怪的——冰冻刚套上…

2026-09-28 05:27 996 技术组
进阶实战游戏功能

神兽下山:金光地缝里蹦出个帮手

【游戏功能】 一、一次吓到自己的召唤 召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地…

2026-09-28 05:05 996 技术组
进阶实战游戏功能

凛冬已至:开一片下不完的冰雪领域

【游戏功能】 一、先抛一个坑 领域类技能最怕做成"一次性特效放完拉倒":冰环扩一圈、冻一下、结束——站在领域里的怪第二秒解冻…

2026-09-28 03:50 996 技术组
进阶实战游戏功能

金环守势:先挨一下再连本带利

【游戏功能】 一、一次只有挨打没有还手的守势 守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡…

2026-09-28 03:48 996 技术组