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

缩骨诀:一咒缩它三分

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

【游戏功能】

把一只狼怪缩到四成高,全部实现就一行:

lua
s = s * 0.6

缩放系数一乘,绘制层跟着缩,看上去一句话的事。可真做进游戏,脚底下漂了、伤害没跟、影子没缩、弹回来那一秒把玩家吓一跳——一行乘法背后是四件跟上不跟上的事。缩骨诀这套"把敌人变小"的玩法,拆的就是乘法之外的功夫。

一、缩身、轻爪、弹回三段

缩骨诀的窗口三段。缩身:玩家掐诀一喝,一圈淡蓝色的光罩住狼怪——它从壮硕的体格缩到四成高,缩的过程带着下坠般的挤压感,脚底的影子同步缩成一小团,头顶"缩骨"的倒计时挂着。这一段最见功力的是锚点:狼怪的绘制坐标钉在脚底,缩的时候四脚钉在原地、身体往下收,要是锚点在身体中央,一缩它就"浮"离地面,看着像飘起来了——那是错位,不是缩骨。轻爪:缩着的五秒里它照样扑、照样咬,只是爪子落下来只有七点——轻刀的飘字小一号、染上淡蓝,尾巴缀着"缩骨";步子也慢了一截,追人的速度肉眼可见地颓。缩小削的是它"作为怪的体格",体格没了,威慑先没了。弹回:五秒一到,它"噗"地弹回原样——回弹带一档过冲,先弹过原大一圈再落回来,落地一声闷响震一下屏。弹回的那一瞬它是满血的、满力的,玩家要是贴着脸等它回弹,挨的就是个措手不及——窗口的末尾从来都是最危险的时刻。

缩身那零点四秒做了挤压感:先往上蹿一点、再压下去,压的时候身体两侧鼓出来——像被一只无形的手按下去,而不是像被水冲刷掉的冰雕。影子同步缩是另一件容易被漏的事:狼怪的影子要跟着缩放系数一起小,影子不缩,脚下那团黑影还在原地,玩家看不出"它变小了",只觉得它蹲下去了。缩着的狼怪还有一层淡蓝的轮廓光——状态色是第二语言,蓝光一亮,全队都知道这狼现在是袖珍款。

完整演示在这——点「缩骨!」看它缩下去、再算好时间看它弹回来:

demo
 fx-shrink

二、幂尔框架实现:缩放通路与伤害联动

幂尔框架里缩放是绘制层的通用参数,缩骨要做的是把数值层挂到同一根系数上:

lua
local Shrink = {}
local SHRINK_TIME, SHRINK_S, AMP = 5, 0.62, 0.5

function Shrink.Cast(target)
    SL:PlayActorAct("player", "cast")
    SL:ScheduleOnce(function()
        SL:RegTween(0.4, function(k)
            SL:SetScale(target, 1 - (1 - SHRINK_S) * k)   -- 收: 四成高
        end, function()
            SL:AddModifier(target, "atk_out", 1 - AMP)    -- 爪: 轻一半
            SL:SetSpeedFactor(target, 0.55)               -- 步: 慢一截
            SL:ShowTipAbove(target, "缩骨!")
            SL:RegOnce("shrink_back", SHRINK_TIME, function()
                Shrink.Grow(target)
            end)
        end)
    end, 0.24)
end

function Shrink.Grow(target)
    SL:RemoveModifier(target, "atk_out")
    SL:SetSpeedFactor(target, 1)
    SL:RegTween(0.3, function(k)
        SL:SetScale(target, SHRINK_S + (1.08 - SHRINK_S) * k)   -- 过冲: 弹过原大
    end, function()
        SL:RegTween(0.15, function(k2)
            SL:SetScale(target, 1.08 - 0.08 * k2)                   -- 落回: 原大
        end)
        SL:ShakeCamera(3, 0.15)
    end)
end

SL:RegClick("shrink", function() Shrink.Cast("monster") end)

return Shrink

锚点问题在 SetScale 的实现里解决:缩放以脚底为原点,高度往上收——绘制层定了规矩,所有用缩放的玩法都不用再操心"浮空"。

缩放系数的联动用一条查询通道收敛:伤害折算、速度折算都来查这一个系数,不各自存一份——两处存系数,一处改了一处没改,狼怪就是"看着小、打人疼"的错位怪。回弹的过冲只在视觉层,判定和数值直接落回原值——过冲是给眼睛的余韵,不是给判定的悬念,弹回的那零点一秒狼怪不是真的更大。

三、四成的分寸与弹回的预告

四成这个数是缩骨诀的脸面:缩到六成,它还是只狼,威慑没散;缩到三成,像只狗崽,喜感压过战斗感——四成刚好卡在"它还咬人、但咬不疼"的位置。爪伤减半、步速四成五,两条数值都从同一口锅里出:缩的是体格,削的就是体格带来的一切,攻击距离理论上也该缩,演示里狼怪贴脸扑咬,距离的账就没入表——一入表,命中判定跟着缩,玩家会发现"它够不着我了",那又是另一个玩法了。五秒的窗口配回弹的过冲:回弹前半秒,狼怪身体微微发亮、开始膨胀——预告做足,玩家有半秒决定是撤是打。缩骨和减伤类分账:铁罡是它硬、缩骨是它小,一个抗揍一个掉档,缩骨期间它照样吃满伤害——缩的是威风,不是血肉,这条边界和透骨钉那次"护体罡气挡不住真伤"是同一套语法:画面的变化只改它说了什么,不改它挨了什么。

缩放牵动的连锁账要在实现前盘清:受击框跟着缩、贴图跟着缩、影子跟着缩——几样里漏一样,画面立刻说谎。攻击距离那条我们讨论过没入表:距离缩了,狼怪贴不了脸,缩骨就变成放风筝的外挂,玩法被一个系数改写——体格的小只表达在威慑和伤害上,距离的账不动。多怪场面留了一手:一次咒只缩最近的一只,群缩的技能另有定价——单体的缩骨是救急,群体的缩骨是改造战场,两码事两本账。最后是音效的小心思:缩身时它的咆哮声调升高几度,小嗓门配小体格,玩家的耳朵会替眼睛作证——它是真的小了。缩骨诀这类改变体格的玩法,验收标准就一条:缩下去的瞬间,玩家有没有下意识地松半口气——会让人松气的削弱,才算真的把狼的威慑削掉了。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

影锁:影锁绑你绑它,锁期拼刀

【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…

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

震魂:震魂入体叠加出招自损

【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…

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

蜂王:喂小怪蜂王进化,三阶蜂王蜇翻全场

【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…

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

血刃:每刀扣血换吸血,血刀双刃

【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…

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

破军旗:旗立三秒圈内加攻,旗倒攻散

【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…

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

淬毒刃:淬毒三刀叠一层,一层毒过一秒六

【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…

2026-10-01 10:00 996 技术组