【游戏功能】
起手之后零点三秒里再点一下,两刀并成一记十六点的双击斩;没接上,起手就白给了。双击斩把"两击"这个概念拆进输入里:第一下是起手式,第二下才是刀——两下的间隔决定这一刀是十六点的斩还是八点的空。这篇把整套模块拆开:配置表、起手表、双击判定、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:点一下起手,零点三内再点成斩
演示场点「斩!」:第一下只是起手——刀抬了一半,头顶转起零点三秒的起手环。环里再点一下:两刀并作一记,"斩-十六"的紫字砸出来,刀光的十字闪得干脆。环转空了才点:第二下成了新的起手,旧的那刀白费——"起手落空"四个字灰溜溜的。演示里试两种节奏:连点两下的急斩,和拖了半秒的慢斩——双击斩的账只认零点三秒,一秒的英雄都救不了迟到的第二下。双击斩玩的是手上的连拍:快,才有第二刀。
fx-twinslash
二、底层原理:一张起手表加一次并刀判定
模块的机关是一对搭档。起手表:第一次点击挂零点三秒的起手态——起手态只记录"有一刀悬着",不结任何伤害,悬着的这一刀是半个刀。并刀判定:起手态里的第二次点击触发双击斩——两刀的伤害并成一笔十六点整付,起手环随斩消散。和连按那类计数爆发的分野在"双击认对不认多":连按数五下一轰,双击只认成对的两下——第三下是新的起手,多按的不会滚利,成对才是这门刀法的唯一语法。
并刀为什么是十六不是十二?单刀八点双击十六等价于没奖励;十六点是"两刀并一刀反而多一刀"的实惠——实惠写明白,玩家才愿意练那零点三秒的手。
三、核心代码:完整模块(上·骨架)
-- @file TwinSlash.lua
-- 双击斩 —— 双击成斩,单击白给
local TwinSlash = {}
local CONST = {
WIND_WINDOW = 0.3,
TWIN_DMG = 16,
SOLO_DMG = 8,
COLOR_TWIN = "#8a58c8",
COLOR_DEEP = "#2e1a5e",
COLOR_GHOST = "#d8c8f4",
ZORDER_WIND = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1042000,
}
local _windOn = false
local _windT = 0
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "TWS",
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 SafeRemove(node)
if node and not GUI:Widget_IsNull(node) then
GUI:removeFromParent(node)
end
end
local function ShowTip(msg)
if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end
local function TwinCut(tid)
SL:ActorHurt(tid, CONST.TWIN_DMG)
SL:TipAbove(tid, "斩-16")
SL:PlayTwinSlashFx(tid)
SL:ScreenShake(2.6, 0.18)
ShowTip("双击成斩——十六点入账")
if SL:GetValue("ACTOR_DEAD", tid) then
ShowTip("它倒了——被一记双击斩放倒的")
end
end
四、核心代码:完整模块(下·定时器与并刀结算)
-- 出刀入口:起手与并刀
function TwinSlash.Slash()
local tid = SL:GetValue("MARK_TARGET_ID")
if not tid or SL:GetValue("ACTOR_DEAD", tid) then return end
if _windOn and _windT > 0 then
_windOn = false
TwinCut(tid)
else
_windOn = true
_windT = CONST.WIND_WINDOW
SL:PlayWindUpFx(SL:GetValue("USER_ID"))
ShowTip("起手了——零点三秒内再点一下成斩")
end
end
-- 定时器:起手倒计时与落空判定
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
if not _windOn then return end
_windT = _windT - dt
if _windT <= 0 then
_windOn = false
ShowTip("起手落空了——白给一刀,再来")
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("斩", function()
TwinSlash.Slash()
end)
ShowTip("技能已加载: 双击斩 (调试按钮触发)")
end, 1.0)
function TwinSlash.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
_windOn = false
end
return TwinSlash
五、机制问答
问:起手期的平砍还照发吗?
答:不发——第一下把普攻的份额顶掉了,起手悬着的只有"成斩"和"落空"两个结局,没有第三条路。
问:第三下连着按算什么?
答:新起手——斩出之后第三下从零起手,连按三下的版本第二三下各自成对,双击的语法就是两下两下数。
问:起手期能移动吗?
答:能——起手悬着刀不锁脚,走位照走,走位中的双击斩才是进阶课。
问:两刀之间挨打了算落空吗?
答:算——起手环照转,挨打不清环,只要零点三内补上第二下,中间挨一刀不影响成斩。
问:斩的距离有限制吗?
答:有——双击斩吃普攻的射程,目标出射程斩落空,近身的双击斩才是完整的双击斩。
问:双击斩能吃轰拳的连珠吗?
答:两本账各记各的——连珠数拳数,双击数对数,同一场里一起开就是两门手艺一起考。
问:起手能存两刀吗?
答:不能——起手环只认一刀,存两刀的版本双击斩变成蓄力,零点三的窗口就是它的全部性格。
六、调参指南与商业服怎么用
第四笔是窗口的紧度:零点三秒是"顺手的连点能成、犹豫的点击落空"的线——窗口放宽到零点五双击成了习惯动作,缩到零点二纯拼反射。第三笔是并刀的实惠:十六点对八点单刀是"成斩多一倍"的账——实惠不够玩家懒得练第二下,实惠过头单击彻底失业。第二笔是落空的宽容:落空只白给不清资源——落空的惩罚是节奏不是资产,练双击的手才敢一直试。第一笔是起手环的可读:环随剩余时间收窄——环走满一圈就是落空的宣判,读环比读心快。常见坑三个:起手环的倒计用整数秒,零点三的窗口显示成一秒;双击的第二下顶掉第一下的伤害顺序,十六点算成八加八;起手和闪避共用按键,闪避键一按起手全断。
商业服里双击斩是"快刀流派"的入门卷:入门考的就是那零点三秒——商城里起手环的样式做成品级,铜环、银环、紫金环,起手环转满又消散的那一瞬就是快刀流派的手感标尺。运营落地还有两笔:一段是连点教学——教学关一句话"两下要快,一下白给",流派第一课是手上的节奏;一段是斩击榜——按双击斩的总伤排名,第二下永远最快的人有碑。变体做成三连斩:双击后再补第三下凑成三连——十六加一刀的进阶连招,快刀的课业层层加码。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
快刀的第二课是收手:落空的那一下别恋战,重新起手比补刀快。
快刀的行话再留一句:第一下给它看,第二下给它疼。
写完留一句给做输入系的同学:双击斩卖的是"第二下才见真章"——那个只转零点三秒的起手环,是把"快半拍"直接标价成双倍伤害的刀谱。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 磁点一开,它的箭全拐——四秒里它射出的每一支箭都拐向同一个聚点,到了聚点整支碎掉,一支都够不着你。磁引把"躲箭…
【游戏功能】 半场一摆两秒一趟的钟摆,砸中站线上的一切——包括被你引过去的怪。钟摆把"地形"变成了武器:它本身不认敌我,你引…
【游戏功能】 两键同按零点一五秒内——铰击:两把刃铰在一起砸它二十,外加半秒的僵。单按一键只有十点白给。这篇把整套模块拆开:…
【游戏功能】 三只怪三角连着链:死一只,另外两只各挨十五;链上再倒一只,最后那只又挨十五——三环扣把"清怪"变成了"连环",…
【游戏功能】 按住攒盾,盾值就是弹量,松手引爆贴脸的怪——蓄盾爆把"防御"改写成了"蓄弹药":盾攒得越厚炸得越疼,攒盾的两秒…
【游戏功能】 按对 劈→刺→扫 三键,一记四十;按错一环,只值八点平砍。三键诀把连招的顺序做成了考卷:三枚键摆在你面前,顺序…