【游戏功能】
追星逐月是法师的追踪系大招:流星从天而降但会追踪狼怪的走位——狼怪跑流星追,撞地爆发的瞬间火星四溅。今天拆追星逐月的表现,看"追踪"这个机制怎么做出"躲不掉"的压迫感。
一、召唤、追踪、撞地三段压迫
追星逐月的压迫三段。召唤段:流星从画面上方出现,拖着火尾往狼怪的方向飞——出手的朝向是初始方向,追踪在飞行中渐进弯曲。追踪段:流星的速度向量每帧朝狼怪的实时位置旋转——追踪的灵敏度决定弯曲的幅度:灵敏度高流星永远追得上,灵敏度低大弯追不上。撞地段:流星碰到狼怪或碰地的瞬间撞地爆发——爆发的冲击环从撞点扩散、火星四溅。三段的压迫感来自"追踪":狼怪跑流星追,追到就是打到——追踪弹道的压迫感是直飞弹道的三倍。
完整演示在这,默认自动循环:
fx-chasemeteo
二、幂尔框架实现:速度向量追踪与撞地爆发
流星的速度向量朝狼怪渐进旋转:
local ChaseMeteo = {}
local KEY = { SPD = 280, TURN = 3 }
local meteor = nil
function CM.Cast(self_, target)
meteor = {
x = SL:GetValue("actorX", self_) + 60,
y = -30,
vx = 120, vy = 260,
target = target
}
SL:PlayActorAct(self_, "cast")
SL:ShowSystemTips("流星追踪中!")
SL:Schedule(function(dt)
if not meteor then SL:UnSchedule("cmRun") return end
-- 追踪: 速度向量朝目标渐进旋转
local dx = SL:GetValue("actorX", meteor.target) - meteor.x
local dy = SL:GetValue("groundY") - 6 - meteor.y
local wantA = math.atan2(dy, dx)
local curA = math.atan2(meteor.vy, meteor.vx)
local diff = wantA - curA
while diff > math.pi do diff = diff - 2 * math.pi end
while diff < -math.pi do diff = diff + 2 * math.pi end
local maxTurn = KEY.TURN * dt
local turn = math.max(-maxTurn, math.min(maxTurn, diff))
local newA = curA + turn
meteor.vx = math.cos(newA) * KEY.SPD
meteor.vy = math.sin(newA) * KEY.SPD
meteor.x = meteor.x + meteor.vx * dt
meteor.y = meteor.y + meteor.vy * dt
SL:SetFxPos("meteor", meteor.x, meteor.y)
-- 命中判定
local tx = SL:GetValue("actorX", meteor.target)
if math.abs(meteor.x - tx) < 20 and meteor.y > SL:GetValue("groundY") - 40 then
SL:PlayFxAt("meteor_burst", meteor.x, meteor.y)
SL:ScreenShake(0.32, 6)
SL:DeductHp(meteor.target, 46)
SL:ShowHitNum(meteor.target, 46, "meteor")
SL:PlayActorAct(meteor.target, "stuck")
SL:UnSchedule("cmRun")
meteor = nil
SL:ScheduleOnce(function()
SL:ShowSystemTips("撞地爆发! — 火星四溅")
end, 0.3)
end
end, 0.016, "cmRun")
end
return CM
追踪的转弯角度上限三弧度每秒是压迫的节拍:弯得太快流星像追踪导弹,弯得太慢流星像喝醉了——三弧度每秒刚好有"追"的压迫没有"锁"的无力。
三、追踪灵敏度与走位的博弈
追踪灵敏度是攻防博弈的核心:灵敏度高狼怪怎么跑都追得上,灵敏度低狼怪一个蛇形走位就能甩掉——灵敏度是玩家和AI之间拉扯的绳子。走位的策略也有讲究:狼怪蛇形跑位让流星的弯曲跟不上、急停反向让流星的转弯来不及——走位的丰富度决定追踪弹道的观赏性。最后,流星的拖尾尾巴用五层递减透明度画——尾巴的长度跟速度成正比:速度越快尾巴越长,尾巴就是速度的视觉量化。爆发的火星用三色混合:橙红的外焰、金黄的内焰、白色的核心——三色混着飞才有爆炸的层次。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…