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

花蝶扇:一把扇子扇出三条火线

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

【游戏功能】

测试环境里飘着一单"灵异"反馈:花蝶扇偶尔只有两把扇子飞出去,第三把原地消失,触发概率不到一成,测了一下午才抓到一次现场。根因是扇面张角滑块拉到最小时,两翼扇和中间扇的初始位置几乎重叠,渲染顺序一变就以为少了一把。今天讲花蝶扇的扇形弹道,顺带把这种"贴脸重叠"的表现坑记下来。

一、扇形散开的三把扇

花蝶扇一次掷三把折扇:中间一把直取目标胸口,两翼沿扇形张角左右包抄,飞行全程保持自旋。三把扇的看点在"散开—收拢"两段:出手瞬间从一点炸开成扇面,接近目标时两翼再向中间聚拢,最后几乎同时命中——散开是覆盖,收拢是保险,扇形的张角滑块就是这两段的几何开关。折扇本身要画足细节:扇骨放射线、扇面渐变、旋转时的高光扫过,三把转着的扇子在深色底上就是三个风车。命中的反馈以中间那把为准:它插在狼怪胸口的位置跳出总伤数字,两翼命中各冒小火花不跳字——账合在主扇上,画面才有主次。

完整演示在这,默认自动循环,可调扇面张角:

demo
fx-fan

二、幂尔框架实现:极坐标散开

三把扇的轨迹就是三个角度的径向插值,幂尔框架里用极坐标一次算齐:

lua
local FanBlades = {}
local KEY = { SPEED = 1.5 }

function FanBlades.Cast(self_, target)
    if SL:GetValue("fanFlying") then return end
    SL:SetValue("fanFlying", true)
    SL:PlayActorAct(self_, "cast")
    local spread = math.rad(SL:GetValue("fanSpread") or 30)
    local tx = SL:GetValue("actorX", target)
    local ty = SL:GetValue("actorY", target) - 58
    local sx = SL:GetValue("actorX", self_) + 20
    local sy = SL:GetValue("actorY", self_) - 56
    local dist = math.sqrt((tx - sx) ^ 2 + (ty - sy) ^ 2)
    local hitCount = 0
    for wing = -1, 1 do
        local ang = wing * spread / 2
        SL:PlayFlyFx("iron_fan", sx, sy,
                     sx + math.cos(ang) * dist,
                     sy + math.sin(ang) * dist,
                     KEY.SPEED, { spin = 14 },
                     function()
                         hitCount = hitCount + 1
                         SL:PlayBurst(tx + wing * 18, ty, "fire_petal", 8)
                         if hitCount == 3 then
                             SL:FreezeFrame(0.05)
                             SL:ScreenShake(0.18, 3)
                             SL:DeductHp(target, 22)
                             SL:ShowHitNum(target, 22, "fan")
                             SL:PlayActorAct(target, "stuck")
                             SL:ScheduleOnce(function()
                                 SL:SetValue("fanFlying", false)
                             end, 0.6)
                         end
                     end)
    end
end

return FanBlades

hitCount 计满三才结算总伤,任何一把扇脱队都会让这一轮哑火——这也逼着表现层把三把扇的速度锁死一致。

三、张角数值与贴脸重叠

开头那个"消失的第三把"的根治方案:张角最小值不设零,设 12 度起步——再小的扇面也要保证两翼扇和主扇的出手位置隔出半个扇身的间距,重叠概率归零。张角上限放 50 度:再大两翼扇就飞出目标区,包抄变成散步。出手时的"炸开感"可以再加强:三把扇离手的第一帧沿径向弹开一小段再进入正常飞行,像指间甩出的牌,这一下弹开是扇类技能和普通三连弹的观感分界。

命中后的扇子去向也要交代:主扇插在目标身上钉半秒渐隐,两翼落地弹一下再消失。飞出去的东西必须有归宿——这是所有投掷类表现的收尾公理,扇子、飞刀、斧头通用。

作者履历与出处

本文由 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 技术组