【游戏功能】
一、先抛一个坑
噬魂术的紫光为什么从怪身上飞向法师而不是从法师飞向怪?方向画反了,玩家的第一反应就是"法师在给怪加血"。吸取类技能的表现方向就是因果的箭头——从受害者指向受益者,箭头不能反。粒子从怪身上出发、沿弧线飞向法师掌心,怪的血条往下掉、法师的血条往上涨,粒子的流向和血条的变化同帧发生,因果一目了然。
二、底层原理
噬魂术的粒子流是贝塞尔弧线加生命周期衰减:五颗紫色光珠从怪身随机位置出发,沿弧线飞向法师掌心,速度带随机偏差——等速的球像列队行军,微差的速度才有"零散灵魂被吸走"的感觉。光珠到达掌心时消失,法师的血条涨一格。整个流程只有一个因果箭头:怪 → 珠 → 法师。
fx-soulorb
三、正确写法
local SoulDrain = {}
local CONST = { KEY = "SoulDrain", ORB_COUNT = 5, DRAIN = 8 }
function SoulDrain.Cast(myID, targetID)
for i = 1, CONST.ORB_COUNT do
SL:ScheduleOnce(function()
SoulDrain.SpawnOrb(myID, targetID)
end, i * 200)
end
end
function SoulDrain.SpawnOrb(myID, targetID)
local sx = SL:GetValue("ACTOR_POSITION_X", targetID)
local sy = SL:GetValue("ACTOR_POSITION_Y", targetID) - 46
local ex = SL:GetValue("ACTOR_POSITION_X", myID) + 20
local ey = SL:GetValue("ACTOR_POSITION_Y", myID) - 56
local orb = CreateSoulOrb(sx, sy)
orb:FlyTo(ex, ey, 0.6, function()
orb:Remove()
SL:SetActorHP(myID, SL:GetValue("ACTOR_HP", myID) + CONST.DRAIN)
end)
end
return SoulDrain
四、四个必须钉死的细节
五、心法:因果的方向就是粒子的方向
噬魂术的粒子方向教的是:一切"转移"类技能的表现都要用粒子方向来传递因果——吸血从受害者飞向受益者,治疗从施法者飞向被治疗者,偷取从失主飞向窃贼。方向画对了,玩家不用看数字就知道谁在吃亏谁在占便宜。粒子方向是表现系统里最廉价的因果箭头,一颗粒子一条弧线就够。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 巡查日志里有个离谱的现场:狼怪的刀抡到一半,忽然僵在半空,头顶跳出一行"前摇断"——绕了半天找不到谁动的手,最…
【游戏功能】 一根木头顺着坡滚下来,凭什么比一记刀更有威慑力?滚木的答案在路上:它不长眼、不停脚、不认人,从画面这头滚到那头…
【游戏功能】 有玩家举报队友"操控怪物"——录像里一头狼怪明明倒地了,几秒后又爬起来,绕开所有人径直去咬另一头狼。查了半天才…
【游戏功能】 if hp < 30 then dmg = dmg 1.6 ——一行拿命换刀的判定,撑起了背水一战全部的疯:气…
【游戏功能】 巡查群的凌晨有条没人认领的报障:练级点的狼怪集体"变慢"了,走两步卡一步,像在水里蹚——读条记录翻到最后才发现…
【游戏功能】 行囊里明明还有三张符、两瓶药,为什么一把火烧了反而更强?破釜沉舟的账本就是这么反着记的:退路烧掉的那一刻,刀上…