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

大地震击:震波从脚下追到它跟前

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

【游戏功能】

震波明明看不见,怎么知道它追到哪了?大地震击的答案是把波画出来:双拳砸地,一道紫色的波头贴着地面隆起,以稳定的速度向狼怪脚下推进——追到,掀翻;掀完,波散。今天拆大地震击,看"行进型位移判定"怎么把一段无形的地表波演成有形的一堂课。

一、砸地、放波、掀人三段

大地震击的循环三段。砸地段:战士双拳捶地,脚下炸一圈碎屑加短促震屏——砸地是"上膛":波还没出,但地面已经开始说话。放波段:一道贴地的波头从拳下涌出,匀速三百像素每秒向前推进——波头用双曲线隆起的形状画,底下拖一路尘土——波要"贴地":它沿地表走,不飞不跳,遇到谁掀谁。掀人段:波头撞上狼怪脚下的瞬间,狼怪被弹离地面半秒再摔回来,大字结算——掀是这一击的全部戏剧:不是数字砸上去,是地面把人顶起来。三段的核心是"判定跟着波头走":伤害不在砸地瞬间发生,在波头抵达的那一刻发生——砸地与掀人之间的这段时间,就是玩家观察、狼怪逃跑、波头追赶的整场戏。

完整演示在这,默认自动循环:

demo
 fx-quakeslam

二、幂尔框架实现:波头坐标与行进判定

震波是一个带速度的行进点,判定只看它与目标的距离:

lua
local QuakeSlam = {}
local WAVE_SPD, HIT_R = 330, 22

local wave = nil

function SL:CastQuake(actor, target)
    SL:PlayActorAct(actor, "attack")
    SL:PlayBurst(SL:GetValue("actorX", actor) + 10, GROUND - 6, "quake_dust", 14)
    SL:ShakeCamera(5, 0.25)
    wave = { x = SL:GetValue("actorX", actor) + 26, hit = false }
    SL:ScheduleRepeat(0.016, function()
        if not wave then return end
        wave.x = wave.x + WAVE_SPD * 0.016
        SL:DrawGroundWave(wave.x)
        if not wave.hit and math.abs(SL:GetValue("actorX", target) - wave.x) < HIT_R then
            wave.hit = true
            SL:LaunchActor(target, 0, 44, 0.5)     -- 向上掀44像素, 空中半秒
            SL:HitActor(target, 78)
            SL:ShowTipAbove(target, "-78 掀翻")
            SL:PlayBurst(SL:GetValue("actorX", target), GROUND, "quake_hit", 16)
            SL:ShakeCamera(6, 0.28)
            SL:CancelRepeat()
        end
        if wave.x > SCREEN_W + 40 then
            wave = nil
            SL:CancelRepeat()
        end
    end)
end

return QuakeSlam

LaunchActor 的四个参数是"方向、高度、滞空"——掀的本质是一次框架托管的小抛物线:落地位置不变、半秒后原地摔回,尘土一圈收尾。波头与目标的距离判定每帧跑,波追上谁谁挨掀。

三、波头的画法与掀的规格

波头是"会跑的小土包":双曲线轮廓、紫白双层描边、高度随时间轻微起伏——起伏让波看起来在"翻涌",恒定高度的波是推土机。波尾一路撒紫色尘粒、落地即散——尾迹是波的速度计,尘密则波急。掀人的三件套按顶格配:弹离地面四十四像素、空中滞留半秒、落地补一圈尘土——高度给足,"掀"字才成立;只给数字不给位移的那叫砍,不叫掀。砸地与掀人的震屏要分级:砸地五像素短震、掀人六像素重震——两级震屏让"上膛"与"出膛"在手感上有别。还有一处易被忽略的时序:波头掀人的判定圈(二十二像素)要略大于波头的视觉宽度——判定略宽于画面,玩家才不会觉得"明明撞上了却没掀"。

四、行进判定的公平与边界

行进型判定的公平全在"看得见"三个字:波速三百像素每秒、屏幕宽度内跑不到两秒——狼怪有整整一秒多的时间看到波头逼近,逃得掉但很难看,这是行进判定区别于瞬间判定的全部诚意。三条边界:其一,波只走直线——不追踪、不拐弯,目标横向逃出波道就安全,行进判定必须保留"让开"这个选项;其二,掀不追击——波头命中一次即散,掀完的这一下不附带任何后续,行进技不搞二次收割;其三,波对地形诚实——画面上有沟壑障碍的版本里,波撞墙即碎,地形说了算。与彻地钉对照着看,两个地面系技能分工清楚:钉是"地上长出来的固定威胁",波是"地上跑来的移动威胁"——一个考站位、一个考反应,地面这句话有两张考卷。砸地上膛、波头行进、掀人顶格、直线不追——四件咬合,大地震击才是一堂看得见的地震课。

五、波速的曲线与走廊的玩法

波速三百像素每秒是匀速,但匀速未必是最好的答案。演示跑下来的一处调整值得记录:波头在全程七成之前匀速、最后三成缓增三成速——追逐的后程提速把"追上了"的紧张感推到顶,匀速到底的波像传送带,后程发力的波像追债的。反过来也有反着用的版本:减速波头给怪物留出"险险逃掉"的机会,逃逸成功的那一下踉跄比掀翻更出戏——追与放之间,波速曲线就是设计师的态度。战法层面,震波最适合讲的组合是走廊:大地震击放一道波,波道两侧再用气功波把怪往波道上推——推与波两个技能的几何咬合,怪被夹在直线上一路挨掀。双人配合的版本更顺:一人放波、一人在波道尽头补刀,波头把怪赶进刀口,行进判定天然就是赶怪的工具。工程上还有一条这轮踩出来的经验:波头的行进判定每帧跑一次距离检查就够,千万不要给波道沿途撒判定点——沿途撒点的版本在波速调快后会出现"跳帧穿人"的漏判,一个行进点一个距离检查,简单但必须遵守。掀得漂亮的前提是波跑得老实——行进判定的所有花活,都应该长在这句老实话上。

这轮写下来还有一句想留的话:这类技能最容易在迭代里走形——改一次数值、调一次粒子,最初的那个"为什么好看"就慢慢丢了。把每个技能最核心的那一句话钉在模块头部注释里,往后任何一次改动,先问一句还符不符合那句话,再动手。表现层的所有分歧,最后都要回到那句话上对表。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

翻棋格纹:棋格四秒一翻,踩黑格的它挨重刀

【游戏功能】 最后抛一个坑:棋盘能不能自己翻?棋类的妙处全在格子——同一枚子,落在黑格是一步闲棋,落在黑格加成就是一步杀招。…

2026-10-02 00:57 996 技术组
进阶实战游戏功能

双簧拍纹:它们一起出手,就一起挨罚

【游戏功能】 上一版埋了个"永不触发"的隐蔽报错:双簧纹的齐爪判定永远不成立——两只怪的爪明明一前一后落在同一帧里,判定却始…

2026-10-02 00:57 996 技术组
进阶实战游戏功能

守灶火纹:灶火要人添柴,火旺怪挨烧

【游戏功能】 上一版留了条越烧越旺的隐蔽报错:灶火的燃料没有上限——玩家的每一刀都往灶里添柴,刀快的人把燃料堆到了六十秒,灶…

2026-10-02 00:57 996 技术组
进阶实战游戏功能

借风顺纹:它劈空的一刀,借给你当劲

【游戏功能】 chg=math.min(24,chg+8) ——先拆这一行。借风纹的账全在这一行的封顶里:它劈空的每一刀往你…

2026-10-02 00:57 996 技术组
进阶实战游戏功能

留情善纹:刀下留情,它念你的好

【游戏功能】 先抛一个坑:打不过就杀,打得过也要杀,能不能有一回不杀?五十多个机制写下来,刀刀都是奔着怪的血条去的——留情、…

2026-10-02 00:57 996 技术组
进阶实战游戏功能

接龙令纹:换手接龙,龙接得越长刀越重

【游戏功能】 上一版出过一场查了半宿的线上事故:接龙纹的龙总是在换手的一拍断掉——玩家明明规规矩矩换目标接龙,龙却每次都从零…

2026-10-02 00:57 996 技术组