【游戏功能】
P.x = M.x + 60 —— 就这一行,虚空步的全部机关:消失一步,出现在它身后六十步的位置。这篇把整套模块拆开:配置表、虚空构件、传送结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:消失一步,出现在它身后
演示场点「虚空步!」:玩家原地化为一阵青紫色的雾——同一帧,雾在怪的身后六十步处重新凝聚——你已经站在它背后了。背刺一刀二十,比正面平砍翻倍。演示里试两种用法:出现在它背后输出一轮再走,和消失后在原地等它转身——前者的背刺二十是最优解,后者的原地等待是浪费虚空步的冷却。虚空步教的是位置:打架打得好的核心不是刀快,是站得对。
fx-voidstep
二、底层原理:一段虚空传送加一次背刺结算
模块的机关是一对搭档。虚空传送:按钮落术的那一帧,玩家坐标从当前位置跳到怪的身后六十步——传送是瞬间的,没有弹道没有延迟,消失和出现是同一帧。背刺结算:出现在怪身后的第一刀吃背刺加成翻倍——不是因为虚空步加了伤害,是因为你站到了它身后。和闪现那类纯位移的分野在"虚空步的目标是怪的身后不是任意方向":闪现随便往哪闪,虚空步永远闪到怪的背面——锁定了结果的方向性,才有了背刺的必然性。
传送为什么固定六十步?六十步是近战射程之内、怪的攻击范围之外的黄金距离——太近贴脸挨爪,太远背刺够不着,六十步刚好是你出刀它够不着的绝对安全区。
三、核心代码:完整模块(上·骨架)
-- @file VoidStep.lua
-- 虚空步 —— 消失后出现在它身后
local VoidStep = {}
local CONST = {
STEP_DIST = 60,
STEP_CD = 5.0,
BACKSTAB_DMG = 20,
COLOR_VOID = "#6878c8",
COLOR_DEEP = "#1a1a52",
COLOR_GHOST = "#c8d0f4",
ZORDER_VOID = 134,
ZORDER_FX = 135,
AUTOINC_BASE = 1069000,
}
local _cdLeft = 0
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "VDS",
CONST.AUTOINC_BASE + _autoInc)
end
local function GetActorPos(id)
if not id then return nil end
local x = SL:GetValue("ACTOR_POSITION_X", id)
local y = SL:GetValue("ACTOR_POSITION_Y", id)
if not x or not y then return nil end
return { x = x, y = y }
end
local function ShowTip(msg)
if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end
function VoidStep.Step()
if _cdLeft > 0 then
ShowTip("虚空冷却——" .. string.format("%.1f", _cdLeft) .. "秒")
return
end
_cdLeft = CONST.STEP_CD
local myID = SL:GetValue("USER_ID")
local tid = SL:GetValue("MARK_TARGET_ID")
local mp = GetActorPos(myID)
local tp = GetActorPos(tid)
if not mp or not tp then return end
local side = mp.x < tp.x and -1 or 1
SL:SetActorPos(myID, tp.x + side * CONST.STEP_DIST, tp.y)
SL:PlayVoidStepFx(mp.x, mp.y, tp.x + side * CONST.STEP_DIST, tp.y)
SL:TipAboveMe("虚空步")
ShowTip("虚空一步——出现在它身后")
end
四、核心代码:完整模块(下·定时器与背刺结算)
-- 背刺结算:虚空步后的第一刀翻倍
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "VDS_Back", function(tid)
if _backstab then
_backstab = false
return CONST.BACKSTAB_DMG
- (SL:GetValue("HIT_DAMAGE", tid) or 10)
end
return 0
end)
-- 定时器:冷却推进
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("虚空步", function()
VoidStep.Step()
end)
ShowTip("技能已加载: 虚空步 (调试按钮触发)")
end, 1.0)
function VoidStep.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
_cdLeft = 0
_backstab = false
end
return VoidStep
五、机制问答
问:虚空步能对空中目标使用吗?
答:能——虚空步传送的是位置不是攻击,只要目标有坐标就能传到它身后,至于打不打得到另说。
问:传送后怪会立刻转身吗?
答:会——怪的朝向每帧更新,但转身需要一拍动画,这一拍就是背刺的时机。
问:虚空步能连续使用吗?
答:看冷却——五秒冷却就是五秒,连续传送的版本虚空步变成永久闪现,没有冷却的位移技不叫位移技叫飞行。
问:传送后原来的位置有残留吗?
答:有——原地留一阵青紫色的虚空雾,雾的消散时间就是"你来过"的痕迹,也是给对面的心理暗示。
问:虚空步和闪现的区别在哪?
答:闪现是自由的,虚空步是有目标的——闪现随便往哪走,虚空步永远去怪的身后,锁定目标等于锁定方向。
问:虚空步后的背刺和普攻能连吗?
答:能——背刺是独立结算的一次额外伤害,后面的普攻照常出,背刺不占普攻的节奏拍。
问:虚空步能追着逃跑的怪用吗?
答:能——虚空步传的是目标身后不看跑没跑,逃跑的怪照样传到它身后,追击也是虚空步的用法。
六、调参指南与商业服怎么用
第四笔是距离的档位:六十步是"近战够得着、怪的爪子够不着"的黄金距离——距离太近背刺变贴脸互殴,太远背刺的刀够不到目标。第三笔是背刺的档位:二十点对十点平砍是正好的双倍——翻倍以上虚空步变成主力输出,翻倍以下背刺不如平砍。第二笔是冷却的手感:五秒对一场四十秒的架是八次传送——冷却太短虚空步变成无限位移,太长一场架只能用一两次。第一笔是传送的视觉:原地雾散和落地凝聚要在同一帧完成——传送的"瞬间感"全靠两帧的无缝切换,有任何延迟就不是虚空步是慢动作。常见坑三个:传送的目标坐标没有做地形校验,传送进墙里;背刺加成没设触发窗口,传送后过五秒再打还翻倍;传送后朝向没有自动面向目标,背刺的刀从正面砍。
商业服里虚空步是"暗影刺客流派"的看家步:别人走近路他走虚空——商城里传送特效做成品级,青雾、紫雾、暗影雾,消失和出现的那两帧就是暗影刺客的签名。运营落地还有两笔:一段是背刺教学——教一句"传到背后再出刀",流派第一课是站位的含义;一段是虚空榜——按虚空步后的背刺总伤排名,传得最准的人有碑。变体做成连锁虚空步:传送后五秒内再按一次传回原地——来回去之间的路线画出一场虚空舞。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
暗影刺客的信条就一句:背面比正面安全。
暗影刺客还有半句压箱的:虚空步的六十步不是安全距离是最佳射程。
写完留一句给做位移系的同学:虚空步卖的是"换个位置就是换个世界"——那阵原地散开的青紫雾和背后六十步的新站位,是把位置本身变成伤害倍率的传送术。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…