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

疾光电影:一条电光穿一串

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

【游戏功能】

拆一行代码:

lua
SL:DrawLightning(x1, y1, x2, y2, { jitter = 10, layer = 2 })

起点终点之间抖出一条锯齿闪电——疾光电影的表现核心就这一行:刀尖到屏幕尽头,一条近乎笔直的紫电贯串而过,线上所有目标同帧结算。今天讲这条"线"的表现,重点在怎么让它直得霸道又抖得真实。

一、直线预警、贯串、沿途结算

疾光电影的时间轴三拍。第一拍预警:一条淡紫虚线从刀尖延伸到画面边缘,虚线静静躺在那里半秒——直线的规则先讲清楚:线上的人都是目标。第二拍贯串:虚线位置瞬间炸出实体电光,主干笔直、边缘锯齿抖动、双层描边外紫内白,半秒内从亮到灭。第三拍结算:线上的狼怪同时后仰、同时跳数字、同时炸火花——注意是"同时",疾光电影的爽点就在一个"串"字,数字一前一后地跳就成了三段普攻。结算那一帧要配全屏轻闪和短震屏,一条线的伤害要有贯穿画面的分量。

完整演示在这,默认自动循环,可调电光宽度:

demo
fx-linebolt

二、幂尔框架实现:锯齿生成与双层描边

闪电主干是直线,锯齿只做垂直扰动,扰动沿两点插值生成:

lua
local LineBolt = {}
local KEY = { CHARGE = 0.55, LIFE = 0.3 }

local function BuildBolt(x1, y1, x2, y2, seg)
    local pts = { { x = x1, y = y1 } }
    for i = 1, seg do
        local t = i / (seg + 1)
        local mx = x1 + (x2 - x1) * t
        local my = y1 + (y2 - y1) * t
        -- 垂直方向随机偏移, 主干仍然笔直
        local nx, ny = (y2 - y1), -(x2 - x1)
        local len = math.sqrt(nx * nx + ny * ny)
        local amp = math.random(-5, 5)
        pts[#pts + 1] = { x = mx + nx / len * amp, y = my + ny / len * amp }
    end
    pts[#pts + 1] = { x = x2, y = y2 }
    return pts
end

function LineBolt.Cast(self_, targets)
    SL:PlayActorAct(self_, "cast")
    -- 预警虚线
    SL:PlayGroundFx("aim_line", SL:GetValue("aimY"), KEY.CHARGE)
    SL:ScheduleOnce(function()
        local x1 = SL:GetValue("actorX", self_) + 22
        local y1 = SL:GetValue("actorY", self_) - 56
        local pts = BuildBolt(x1, y1, 660, y1, 16)
        SL:DrawLightningPts(pts, { layer = 2, width = SL:GetValue("boltWidth") })
        SL:ScreenShake(0.26, 5)
        -- 沿线同帧结算
        for _, t in ipairs(targets) do
            SL:DeductHp(t, 31)
            SL:ShowHitNum(t, 31, "bolt")
            SL:PlayBurst(SL:GetValue("actorX", t),
                         SL:GetValue("actorY", t) - 58, "violet", 16)
            SL:PlayActorAct(t, "stuck")
        end
        SL:ScheduleOnce(function()
            SL:ClearLightning()
        end, KEY.LIFE)
    end, KEY.CHARGE)
end

return LineBolt

锯齿只许垂直偏移、不许沿走向错位——主干一旦被锯齿拉歪,"笔直贯串"的气势就散了。

三、宽度层级与多条线并存

电光宽度是唯一的强度旋钮,但宽度变化要同步改三层:主干线宽、外晕宽度和闪白时长,三层联动才像"更粗的电",只改线宽就是一根变胖的毛线。锯齿频率比振幅重要:高频小幅的抖动是电,低频大幅的抖动是心电图。多条疾光电影同屏时,各自的锯齿相位要错开,两根完全同步跳动的闪电并列,像复制粘贴的贴图。

结算的"同时性"最后再强调一遍:同帧结算在实现上是循环里连发,在表现上就是一帧内全部数字上屏。如果引擎的跳字队列有节流,宁可把这条线的数字合并成一颗大数字落在最重的目标头上,也别让三颗数字排队三帧跳——贯串的魂是整齐划一,队列一排队,魂就散了。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

回蓝:符纸的账,从普攻里抽

【游戏功能】 法师的困扰千篇一律:蓝条见底符纸哑火,站在怪堆里干瞪眼——直到有人给他看了一行账:符落三十五蓝,杖挥一刀回十二…

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

偷师:看它那一手,回头就还给它

【游戏功能】 地刺从脚底下炸出来的那半秒,大多数人的选择是躲——只有极少数人按下了偷师。偷师的机制是一场限时的一秒课:它抬手…

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

离间:让它们自己打自己

【游戏功能】 两只狼配合得像一个人:一只咬前蹄、一只扑后背,多少人栽在这对搭档手里——直到有人往白狼背上钉了一张嫁祸符。离间…

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

借体:把它的身子当盾,箭都钉它背上

【游戏功能】 弓狼在远处放冷箭,刀狼在近处追着你——两头受气的死局,怎么破?有老手给出的答案匪夷所思:往刀狼身后一站,让它替…

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

驱散:一层层剥它的好处

【游戏功能】 buffs[name] = nil ——一行删表项的代码,写尽了驱散全部的狠辣:狼怪顶着三层好处——狂暴加攻、…

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

箭囊:十二支箭数着打,囊空再装

【游戏功能】 弓箭手的伤害明明不低,为什么同样的怪别人十秒放倒、他要磨半分钟?看完他的操作就明白了:箭是乱射的,囊空了站在原…

2026-09-30 19:25 996 技术组