【游戏功能】
弹道反弹的判定就这一行:
bolt.back = not bolt.back
毒箭飞到近前,一拨,方向位一翻——箭原路飞回去扎向发射它的狼。截镖是把箭碎掉,拨千斤是把箭还回去——一个毁掉威胁,一个归还威胁。这一行方向翻转的后面,藏着弹道归主、命中结算、拨空的代价三笔账。今天拆开。
一、离弦、借力、自食三段
拨千斤的三段。离弦:狼怪吐出毒箭,红光的箭头直奔玩家,飞行一秒半——和其他弹道一样,看得见的威胁才接得住。借力:箭飞到近前一个身位内,点拨——玩家反手一记短促的挥拨,拨中的箭头原地翻转,红光变紫光,拖着新的尾巴原路弹回——"借力"两个字在翻转点炸开一圈紫环,箭还是那根箭,主人换了。拨的手感也要做足:挥拨是半圈短促的紫弧,拨中箭的一瞬有半帧的顿感——箭在指尖停半拍再飞出去,"接住了再还"的实感全在这半拍里。自食:弹回的箭速度比来时快一倍,一头扎进狼怪自己身上——十八点的毒账原路奉还,飘字"自食"两个字钉在狼怪头顶。三段连起来:拨千斤不是防御,是防御的反面——把敌人的输出整个签收,再原地址退回,退回的运费由对方承担。
完整演示在这——等毒箭飞到近前,点「拨!」原路还给它:
fx-deflect
二、幂尔框架实现:方向位翻转与归主结算
幂尔框架里弹道反弹是弹体上的一个方向位翻转,归主结算跟着新方向走:
local Deflect = {}
local SWEEP_RANGE, BACK_SPEED = 120, 300
function Deflect.Sweep()
SL:PlayActorAct("player", "attack")
local i, hit = 1, false
local bolts = SL:GetProjectiles("enemy")
while i <= #bolts do
local b = bolts[i]
if not b.back and b.x - SL:GetValue("x", "player") < SWEEP_RANGE then
b.back = true -- 方向位: 就这一行
b.speed = BACK_SPEED
hit = true
SL:PlayBurst(b.x, b.y, 10, "deflect_ring")
SL:ShowTipAbove(b.x, b.y, "借力!")
SL:PopText("player", "拨", "purple")
break
end
i = i + 1
end
if not hit then
SL:ShowTipAbove("player", "拨空")
SL:Cooldown("sweep", 1.5)
end
end
local function onBoltHitOwner(bolt, monster)
if bolt.back then
SL:Damage(monster, 18, "self_bolt")
SL:ShowTipAbove(monster, "自食!")
SL:KillProjectile(bolt)
end
end
SL:On("projectile_hit", onBoltHitOwner)
SL:RegClick("sweep", Deflect.Sweep)
return Deflect
弹体上的 back 位翻转会带着速度一起翻——回去的箭快一倍,这笔加速是"借力"的字面意思:力是敌人出的,路是敌人修的。
三、近前的窗口与拨空的学费
一个身位的拨击窗口是这套玩法的门槛:箭刚离弦就拨,够不着;箭贴脸才拨,来不及——窗口卡在箭飞行过半之后的近前段,拨的时机比截镖更苛刻,收益也更狠:截镖毁掉威胁,拨千斤把威胁变成输出。拨空的代价一秒五冷却:拨空没有奖励只有一声灰字——空拨的学费要交,但只交冷却不交血,这门手艺才有练头。和截镖的分账写清楚:截镖是击碎,毒箭当场化为光屑,玩家零风险;拨千斤是反弹,箭原路扎向狼怪,玩家借的是敌人自己的力——前者是拆弹专家,后者是四两拨千斤的武人,两个玩法摆在一起,玩家会根据自己的手选边。最后一条给表现组:弹回的箭要变色变粗——红箭变紫箭、尾焰加粗一倍——弹道的主人换了,弹道的脸也得换,玩家隔着半个屏幕都要读得出"这支箭现在是我的了"。
拨千斤的上限还有一层:连续拨——狼怪连吐两箭,两箭都拨回去,第二箭追着第一箭扎,连自己的毒都要排队挨——连拨的窗口重叠着开,手快的玩家一拨双还。拨回去的箭能不能被狼怪再拨回来?规范写死不能:箭离了主人的手,就归玩家所有——弹道的主权一经转移不再逆转,这条边界守住了拨千斤的最后的体面。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…
【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…
【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…
【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…
【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…
【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…