【游戏功能】
剑气纵横是战士的横版大招:一道横向剑气波从人物位置发出,贯穿狼怪直奔屏幕边缘——穿透的意义是"不止打一个"。今天拆剑气纵横的表现,看一道横向剑气波怎么做出贯穿全场的气势。
一、气聚、出剑、穿透三段贯穿
剑气纵横的贯穿三段。气聚段:人物气聚丹田微微发亮——蓄势不用太长,零点三秒的凝聚就够。出剑段:一道横向剑气波从人物位置发出,宽度五十像素贯穿全场——剑气的宽度可调,宽度就是覆盖面。穿透段:剑气穿过狼怪后继续前进、消散于屏幕边缘——穿透的意义是"不止打一个"。三段的核心是"贯穿":穿过狼怪时留下蓝色剑痕,不因命中而消失。
完整演示在这,默认自动循环:
fx-swordqi
二、幂尔框架实现:横向波渲染与命中穿透
剑气波用线性渐变填充横向矩形,穿透后继续飞行:
local SwordQi = {}
local KEY = { SPD = 500 }
local waveX, waveActive = 0, false
function SQ.Cast(self_)
if waveActive then return end
waveActive = true
waveX = SL:GetValue("actorX", self_) + 30
SL:PlayActorAct(self_, "attack")
SL:PlaySfx("sword_qi")
SL:Schedule(function(dt)
if not waveActive then SL:UnSchedule("sqRun") return end
waveX = waveX + KEY.SPD * dt
SL:SetFxPos("qi_wave", waveX, SL:GetValue("groundY") - 60)
local target = SL:GetValue("curTarget")
if not SL:GetValue("waveHitM") and waveX >= SL:GetValue("actorX", target) - 16 then
SL:SetValue("waveHitM", true)
SL:PlayFxAt("qi_hit", SL:GetValue("actorX", target),
SL:GetValue("actorY", target) - 58)
SL:ScreenShake(0.2, 3)
SL:DeductHp(target, 38)
SL:ShowHitNum(target, 38, "sword_qi")
SL:PlayActorAct(target, "stuck")
end
if waveX > SL:GetValue("width") + 40 then
waveActive = false
SL:UnSchedule("sqRun")
SL:ShowSystemTips("剑气消散于屏幕边缘")
end
end, 0.016, "sqRun")
end
function SQ.Render()
if not waveActive then return end
local w = SL:GetValue("qiWidth") or 50
SL:DrawGlowRect(waveX - w, SL:GetValue("groundY") - 110, w * 2, 110, "blue_glow")
SL:DrawLine(waveX, SL:GetValue("groundY") - 110,
waveX, SL:GetValue("groundY"), "#ffffff", 1.6)
end
return SQ
Render 里的虚线圈是剑气波的"锋面"——锋面的位置就是伤害的判定线。
三、穿透后的剑痕与连发的可能
剑气穿过狼怪后留下蓝色剑痕——剑痕在狼怪身上保留两秒,两秒内的第二次剑气会叠加伤害——叠加的规则让连发有策略:两发快速连射的伤害比一发蓄力高。最后,剑气波是横向矩形而不是圆形——横向矩形是"扫"的感觉,圆形是"炸"的感觉,剑气纵横的"纵横"就是横向扫过去的纵横。穿透后的蓝痕像一道疤留在狼怪身上——疤痕是剑气存在过的证据,疤痕消失前玩家知道这个技能还有余威。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…