【游戏功能】
一、先抛一个坑
地刺为什么从脚下开始、沿着一条线追到敌阵?做成目标脚下原地一丛刺不行吗?行,但那是控制技。地刺的爽点在"追":刺线从施法者脚下破土,一路推进直扑敌阵,刺头扫过谁谁浮空——玩家看见的是"我的攻击长着腿在追人"。推进式范围技能与定点范围技能的差别,是猎人与陷阱的差别。
二、机制原理:推进前沿即判定前沿
刺线的结构与裂纹冲锋同族:头部位置每帧推进,头部扫过的目标结算浮空。与裂纹的差异有两点。视觉上,地刺是逐节拱出的三棱锥土刺,节与节之间留固定间距,推进过的地面留下渐隐的残刺——残刺是这条线的"尸骸",也是天然的战场标记。判定上,浮空用初速加重力的真抛物线,被顶飞的怪沿刺线方向微位移后落回原位附近,浮空期间不可行动不可受击——地刺的控制是"打断节奏"而不是"伤害放大"。推进速度与刺节密度成反比配置:刺越密推进越慢,压迫感越绵长。
fx-spikeline
三、正确写法:推进刺线(幂尔版)
local SpikeLine = {}
local CONST = { MSG_ID = 12190, KEY = "SpikeLine", SPEED = 600, LEN = 460, AIR_VY = -150 }
function SpikeLine.Cast(myID)
local myX = SL:GetValue("ACTOR_POSITION_X", myID)
local dirSign = SL:GetValue("ACTOR_DIR", myID) == 2 and 1 or -1
SpikeLine._head = myX + 40 * dirSign
SpikeLine._dir = dirSign
SpikeLine._end = myX + dirSign * CONST.LEN
SpikeLine._sched = SL:Schedule(function(dt)
SpikeLine:Update(dt)
end, 0.02)
end
function SpikeLine:Update(dt)
self._head = self._head + self._dir * CONST.SPEED * dt
SpawnSpikeAt(self._head) -- 刺头位置拱出新刺
SpawnDirtDebris(self._head) -- 沿途碎土
for _, id in ipairs(SL:GetValue("FIND_IN_VIEW_MONSTER_LIST") or {}) do
if not self._hit[id] then
local mx = SL:GetValue("ACTOR_POSITION_X", id)
if math.abs(self._head - mx) < 32 then
self._hit[id] = true
SL:SendLuaNetMsg(CONST.MSG_ID, id, 0, CONST.AIR_VY,
SL:JsonEncode({ key = CONST.KEY, op = 2, hit = id }))
end
end
end
if (self._dir > 0 and self._head >= self._end)
or (self._dir < 0 and self._head <= self._end) then
SL:UnSchedule(self._sched) -- 推进完成, 注销心跳
self._sched = nil
end
end
return SpikeLine
四、四个必须钉死的细节
五、心法:让攻击长出方向感
地刺追命的魂是"攻击有方向、有去程":从脚下出发、扑向敌阵、停在尽头。玩家看到的是一条有生命的攻击线。与定点技能相比,推进式攻击多了一个"过程可读"的优势——怪在哪一节被顶飞,玩家看得清清楚楚。把范围攻击做成有来路的推进,命中就不再是概率,是叙事。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、先抛一个坑 套圈摊位的圈扔出去,为什么有的游戏圈是抛物线飘过去的,有的是直线飞过去的?直线圈的判定简单,但…
【游戏功能】 一、一个被指针出卖的开箱 横向开箱卷轴首版上线,最刻薄的评论是:"减速那两秒我知道自己要出什么了,就问你尴尬不…
【游戏功能】 一、先抛一个坑 延时引爆类技能为什么非要给目标头顶挂一个倒计时圈,直接引信到点自动炸不行吗?自动炸的版本省了倒…
【游戏功能】 一、先抛一个坑 砸金蛋为什么非要用锤子砸,点一下直接开不行吗?从数值上讲两者毫无区别,从流水上讲差距十倍——玩…
【游戏功能】 一、一个刮不动的涂层 刮刮乐活动的首版测试报告很委屈:"刮片做出来了,玩家说刮不动。"技术上涂层是一张贴图,手…
【游戏功能】 一、一个被抢空的红包 红包雨活动上线十分钟就被迫关闭:红包生成没问题、下落没问题、点击抢取也没问题——问题是并…