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

火焰粒子:三属性耦合的温度感

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

【游戏功能】
一、一个被当作贴图的火焰

火焰粒子为什么有的看着像真火,有的看着像橙色圆点在闪?差别在粒子的三属性:大小衰减、颜色渐变、重力偏移。真火的粒子从白核出发,经过橙黄渐变为暗红,大小从大到小收缩,同时受微弱的上升浮力影响向上飘。三个属性叠加,火焰的"温度感"就有了。如果粒子只有颜色变化没有大小衰减,火焰就像一团不会熄灭的萤火虫。

二、底层原理

火焰粒子的三属性是互相耦合的:大小衰减控制粒子的视觉寿命——越大消失得越快;颜色渐变按粒子生命周期插值——从白经黄到橙再到暗红;重力偏移用负值表示上升浮力——火焰粒子的重力是负的,它们往上飘而不是往下落。在幂尔框架里,粒子的生成密度由 SL:Schedule 的回调频率控制,每帧生成若干个粒子,用完销毁入池。

demo
fx-phoenix

三、正确写法

lua
local FireParticle = {}
local CONST = { KEY = "FireParticle", LIFETIME = 0.8 }

function FireParticle.Spawn(x, y)
    local p = {
        x = x, y = y,
        vx = (math.random() - 0.5) * 30,
        vy = -20 - math.random() * 40,
        size = 3 + math.random() * 4,
        life = CONST.LIFETIME,
        maxLife = CONST.LIFETIME
    }
end

function FireParticle:Update(dt)
    self.life = self.life - dt
    if self.life <= 0 then self.dead = true return end
    local ratio = self.life / self.maxLife
    self.x = self.x + self.vx * dt
    self.y = self.y + self.vy * dt
    self.vy = self.vy - 8 * dt                      -- 上升浮力
    self.size = self.size * (1 - dt * 0.5)           -- 大小衰减
    self.color = InterpolateColor(ratio)             -- 颜色插值
end

return FireParticle

四、四个必须钉死的细节

  1. 粒子的大小衰减和颜色渐变要同步,大小缩到最小的时候颜色也到最暗。2. 上升浮力用负重力值实现,不要用速度直接往上加——负重力让粒子有减速上升的物理感。3. 粒子池的上限根据场景复杂度动态调整,战斗中多用、探索中少用。4. 火焰粒子的生成位置带随机偏移,不要从一个点精确发射——火焰是从一个区域冒出来的。

五、心法

火焰粒子的设计哲学是"不完美即真实":真实火焰的每一帧都不一样,因为每个粒子的运动都带随机偏差。粒子系统追求的不是精确控制,是可控的随机——在约束范围内让粒子自由运动,涌现出来的效果比手工摆位的贴图生动一百倍。

作者履历与出处

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

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

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

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

进阶实战游戏功能

撞钟:一记钟响,全场的刀顿半拍

【游戏功能】 巡查日志里有个离谱的现场:狼怪的刀抡到一半,忽然僵在半空,头顶跳出一行"前摇断"——绕了半天找不到谁动的手,最…

2026-09-30 16:14 996 技术组
进阶实战游戏功能

滚木:一根木头滚过去,撞它个跟头

【游戏功能】 一根木头顺着坡滚下来,凭什么比一记刀更有威慑力?滚木的答案在路上:它不长眼、不停脚、不认人,从画面这头滚到那头…

2026-09-30 16:14 996 技术组
进阶实战游戏功能

赶尸:一声哨响,倒下的狼替我打

【游戏功能】 有玩家举报队友"操控怪物"——录像里一头狼怪明明倒地了,几秒后又爬起来,绕开所有人径直去咬另一头狼。查了半天才…

2026-09-30 16:14 996 技术组
进阶实战游戏功能

背水一战:血见了底,刀反而疯了

【游戏功能】 if hp < 30 then dmg = dmg 1.6 ——一行拿命换刀的判定,撑起了背水一战全部的疯:气…

2026-09-30 16:14 996 技术组
进阶实战游戏功能

水漫金山:大水漫过来,它站不稳也追不上

【游戏功能】 巡查群的凌晨有条没人认领的报障:练级点的狼怪集体"变慢"了,走两步卡一步,像在水里蹚——读条记录翻到最后才发现…

2026-09-30 16:14 996 技术组
进阶实战游戏功能

破釜沉舟:烧了行囊,刀没了退路

【游戏功能】 行囊里明明还有三张符、两瓶药,为什么一把火烧了反而更强?破釜沉舟的账本就是这么反着记的:退路烧掉的那一刻,刀上…

2026-09-30 16:14 996 技术组