【游戏功能】
刀还抡在半空,下一刀为什么已经蓄上了?预架的答案是一句暗号:挥刀途中再按一次,落刀的瞬间下一刀无缝就接上了——接得上的刀加十点,架早了的白等半拍。今天拆预架,看"输入缓存"怎么把两次按键之间的缝隙,磨成一条刀刀相衔的线。
一、按键、上弦、衔刀三段
预架的循环三段。按键段:上一刀正抡到腰际,手指再按一次出刀——这时候按下的不是一刀,是一句预约:游戏不说什么,只在角色头顶亮一枚小小的菱形记号,"已预架"三个字比任何说明都安心。上弦段:这一刀照常落地,而下一刀的架子在暗处已经悄悄抬起——上弦段是全技能的魔术:观众只看见刀刀相衔没个停,看不见的是那枚记号早把节奏焊死了。衔刀段:落刀的同一帧,下一刀从架子直接荡出去,四十六点带一个"衔"字的小标——衔刀段的账比空砍多十点,这十点不是白给的,是那记提前半拍的手指挣的。三段的核心是"早按不亏、晚按白等":预架奖励的是提前量,惩罚的是犹豫。
完整演示在这,默认自动循环:
fx-nextswing
二、幂尔框架实现:预约是一枚待兑的记号
预架的全部逻辑是往账本里记一笔,等落刀时兑付——
local NextSwing = {}
local SWING_T = 0.34 -- 一刀的时长
local LINK_DMG = 46 -- 衔接刀
local PLAIN_DMG = 36 -- 空砍刀
local state = { swinging = false, queued = false }
function SL:PressSwing() -- 玩家按下的每一次
if state.swinging then
state.queued = true -- 正抡着:记成预约
SL:ShowMark("self", "已预架")
return
end
SL:DoSwing(false) -- 收完才按:就是普通一刀
SL:ShowTipAbove("self", "架早了")
end
function SL:DoSwing(linked)
state.swinging = true
state.queued = false
SL:PlayActorAct("self", "attack")
SL:ScheduleDelay(0.17, function()
local dmg = linked and LINK_DMG or PLAIN_DMG
SL:HitActor("target", dmg)
SL:ShowTipAbove("target", "-" .. dmg .. (linked and " 衔" or ""))
end)
SL:ScheduleDelay(SWING_T, function()
state.swinging = false
if state.queued then -- 落刀的同一帧兑付预约
SL:DoSwing(true)
end
end)
end
return NextSwing
兑付的时机卡在落刀的同一帧是全技能的命门:早一帧是抢拍,晚一帧是断拍——预约要兑得严丝合缝,刀刀相衔的"衔"字才立得住。
三、衔刀的演出规格
预架记号是全技能的脸面:头顶一枚琥珀菱形,亮起的一瞬微微一顿——记号要小要亮,它是打给玩家自己的收条。衔刀的接缝要"无":上一刀的收势与下一刀的起手之间不插任何闲置帧,连脚步都不挪——衔接的最高境界是没有衔接。衔接刀的数字带"衔"字小标、颜色转金——十点的加账要署名,玩家得知道这十点是那记提前量挣的。架早了的戏也要给足:角色原地一顿、记号不亮、头顶冒一枚灰色的小叹号——按早了不是错误,是一记闷亏,闷亏要有闷亏的表情。空档区在计时条上染成一段绿色:挥刀区与空档区一黄一绿并排摆着,玩家的手指照着色块找节奏。
四、定价与三条架规
缓存系的定价一句话:衔刀加十、白按白等、节奏自找——十点不多,它买的是"不停":刀刀相衔的输出密度,才是预架真正的产出。三条架规:其一,一槽一约——预约只存一刀,连按三次也只接住最后一按,槽里没有第二个位置;其二,落刀即兑——预约在落刀帧强制兑付,不存在"攒着等更好的时机",暗号说出去就要兑现;其三,被断即焚——挥刀期被打断,预约当场作废,记号熄灭,接不上的刀怨不了暗号。与连斩对照着看:同是把刀连起来,连斩奖励的是"快"——两秒内追上去才有层数;预架奖励的是"早"——提前半拍按下才有衔接,节奏系的两个门派在"追得上"还是"按得早"上分了家。
五、缓存系的手感学:把缝隙焊成线
预架真正的产品是"手感"这两个字:没有预架的连按,刀与刀之间永远垫着半拍发呆;有了预架,玩家的意图被原样保送进下一刀——输入缓存做的从来不是加法,是传话,把"我想连"这句话一字不差地带给刀。老玩家的手指因此有了新的语法:不是看见刀落才按,是听着自己的节奏提前半拍按——预架练出来的不是手速,是预感。对观战者,刀刀相衔的连击本身就是最流畅的演出,中间没有一帧废话。工程收尾记一笔:预约的兑付帧要压在收势的最后一帧上,提前到击中帧会让两刀的数字叠在同一次震屏里——账要一笔一笔记,震屏也要一次一次震。最后留给数值组的一句话:十点的衔接加成微不足道,但它让每一次提前按都有了回响——缓存系的收益不在数值栏,在"我的每一下都被接住了"这句手感里。
预架与收招是一对天生的对偶:收招防的是刀落之后的空,预架填的是刀落之前的手——一个把软肋标出来让人躲,一个把预约存起来让人连。老玩家两边一起练:前一刀预架按下去,后半拍收招条里人已经让开半步,衔接的密与走位的滑同时在线,刀光是连的,人是活的——两门课都毕业的手,才配得上"行云流水"这四个字。
写完再留一句给做缓存系的同学:输入缓存最忌做成"吞按键的黑洞",而它本该是一枚亮在头顶的收条——按了就记、记了就兑、兑得严丝合缝,玩家的手指才会信任你的刀。
补一个演示彩蛋位:连续三次完美衔接之后,角色会带出一道淡淡的残影——那是节奏进入状态的标志,残影不加分、只提气,老玩家看见它就知道:今天的手,热了。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版埋了个越用越错的隐蔽报错:长按的计时不在抬手时清零——第一次长按松手后,秒表没归零,第二次轻轻一点直接被…
【语法算法】 接着抛坑:淡入没播完又来一个淡出,会怎样?答不好的界面都会出事——同一个面板的透明度被两个渐变同时抢,一个往上…
【语法算法】 上一版留了排"齐步走"的图标的隐蔽报错:一排波浪排布的图标同起同落——设计稿上是此起彼伏的波浪,实机上整排图标…
【语法算法】 先抛一个坑:按钮太小点不中,为什么不做大热区?界面上那个二十像素的小圆钮,玩家戳三次中一次——把按钮画大又会破…
【语法算法】 vel=vel math.pow(0.01,dt) ——先拆这一行。击退的全部手感都在这一行的衰减里:初速三百…
【语法算法】 上个月一场闪了全屏的事故成了组里的教材:受击闪白上线第一天,玩家一挨打整个界面白一遍——血条、按钮、聊天框全泡…