【游戏功能】
测试环境里飘着一单"灵异"反馈:花蝶扇偶尔只有两把扇子飞出去,第三把原地消失,触发概率不到一成,测了一下午才抓到一次现场。根因是扇面张角滑块拉到最小时,两翼扇和中间扇的初始位置几乎重叠,渲染顺序一变就以为少了一把。今天讲花蝶扇的扇形弹道,顺带把这种"贴脸重叠"的表现坑记下来。
一、扇形散开的三把扇
花蝶扇一次掷三把折扇:中间一把直取目标胸口,两翼沿扇形张角左右包抄,飞行全程保持自旋。三把扇的看点在"散开—收拢"两段:出手瞬间从一点炸开成扇面,接近目标时两翼再向中间聚拢,最后几乎同时命中——散开是覆盖,收拢是保险,扇形的张角滑块就是这两段的几何开关。折扇本身要画足细节:扇骨放射线、扇面渐变、旋转时的高光扫过,三把转着的扇子在深色底上就是三个风车。命中的反馈以中间那把为准:它插在狼怪胸口的位置跳出总伤数字,两翼命中各冒小火花不跳字——账合在主扇上,画面才有主次。
完整演示在这,默认自动循环,可调扇面张角:
fx-fan
二、幂尔框架实现:极坐标散开
三把扇的轨迹就是三个角度的径向插值,幂尔框架里用极坐标一次算齐:
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 法师的困扰千篇一律:蓝条见底符纸哑火,站在怪堆里干瞪眼——直到有人给他看了一行账:符落三十五蓝,杖挥一刀回十二…
【游戏功能】 地刺从脚底下炸出来的那半秒,大多数人的选择是躲——只有极少数人按下了偷师。偷师的机制是一场限时的一秒课:它抬手…
【游戏功能】 两只狼配合得像一个人:一只咬前蹄、一只扑后背,多少人栽在这对搭档手里——直到有人往白狼背上钉了一张嫁祸符。离间…
【游戏功能】 弓狼在远处放冷箭,刀狼在近处追着你——两头受气的死局,怎么破?有老手给出的答案匪夷所思:往刀狼身后一站,让它替…
【游戏功能】 buffs[name] = nil ——一行删表项的代码,写尽了驱散全部的狠辣:狼怪顶着三层好处——狂暴加攻、…
【游戏功能】 弓箭手的伤害明明不低,为什么同样的怪别人十秒放倒、他要磨半分钟?看完他的操作就明白了:箭是乱射的,囊空了站在原…