【游戏功能】
线上出过一次灵异归位:玩家点了归影,人没回到石头旁,而是卡进了半块岩石里——追下来是留影石落地时只存了坐标引用,没存坐标快照,玩家在留影之后推了石头一脚,石头"被挪动",归影的落点跟着引用走,一头扎进新位置。两行代码的差别,一个快照一个引用,今天借这套留影石把"锚点归位"整套拆开。
一、落石、遛狼、归影三段
留影石的循环三段。落石:玩家把一枚菱形蓝石落在脚下,石头的虚影烙在地面上,八秒的存续倒计时挂在石顶——落影的位置就是玩家自己选的"家",落得越刁钻,后面归影越安全。遛狼:落完石头玩家故意贴近狼怪,狼扑过来,玩家绕着它兜圈,把它从石头边上引开——遛的功夫全在这一段,石头是保险绳,绳的另一头钉在远处,玩家拽着狼越走越远,心里越有底。归影:狼爪扬起的瞬间点归影,玩家的身影在原地淡成一抹残像,人已经出现在石头旁——狼这一扑扑在空气上,头顶飘一个"扑空"的灰字,愣在原地目送你站在十几步外冲它招手。三段连起来,留影石卖的就是"进可遛狼、退有归处"的从容,狼的爪再快,快不过一次回家的直线。
落石的位置学在落子那一刻就定了性:落在身后的开阔地,归位之后四面透风;落在岩壁的凹角,归位后背靠石壁只防三面——落影那一刻想的是逃,会玩的人连逃到之后怎么站稳一起想。虚影也有戏:石头落下的瞬间,地面烙出一圈淡蓝的菱形虚影,虚影跟着石头一起呼吸明暗——玩家的余光随时知道家在哪,真到危急时不用转头找。
完整演示在这——点「留影!」把石头落在远处,遛近了再点「归影!」:
fx-anchor
二、幂尔框架实现:坐标快照与归位结算
幂尔框架里留影是一个带寿命的坐标快照实体,归位走的是瞬移结算:
local AnchorStone = {}
local STONE_LIFE = 8
function AnchorStone.Mark()
local x = SL:GetValue("x", "player")
local y = SL:GetValue("y", "player")
local stone = SL:SpawnUnit("anchor_stone", x, y)
stone.snapX, stone.snapY = x, y -- 快照: 值拷贝, 不留引用
stone.life = STONE_LIFE
SL:RegUnitTick(stone, 1, function(s)
s.life = s.life - 1
if s.life <= 0 then AnchorStone.Expire(s) end
end)
SL:SetAnchor("player", stone)
end
function AnchorStone.Recall()
local stone = SL:GetAnchor("player")
if not stone then
SL:ShowTipAbove("player", "没有留影")
return
end
SL:PlayAfterimage("player", 0.5)
SL:BlinkTo("player", stone.snapX, stone.snapY) -- 归位: 走快照的值
SL:KillUnit(stone)
SL:ClearAnchor("player")
SL:PlayBurst("player", "return_ring", 8)
SL:ShowTipAbove("player", "归影!")
end
local function onStonePushed(stone, dx)
stone.x = stone.x + dx -- 石头可被推动
-- snapX 不动: 归位永远回最初的位置
end
SL:On("unit_pushed", onStonePushed)
SL:RegClick("mark", AnchorStone.Mark)
SL:RegClick("recall", AnchorStone.Recall)
return AnchorStone
那次卡岩石的事故,答案就是 snapX 和 stone.x 的分家:石头是可推的实体,快照是不可变的账——归位读快照不读实体,人永远回到"落影那一刻的位置",石头后来去哪与玩家无关。
调用方式上还有一处巧劲:SetAnchor 把石头登记成玩家的锚,同一时间只能有一枚——第二枚落下的瞬间旧锚自动碎裂,返回值直接顶替,玩家永远只有一条归途。寿命的 tick 给石头挂上逐秒递减,虚影的明暗直接吃寿命的百分比——石头的视觉状态和它的账面寿命同一根管子供血,不会出现"石头看着亮堂、其实早过期"的错位。
三、八秒的寿命与归点的选择
八秒存续是留影石的债:石头存在,退路就在;石头一散,退路作废,"留影消散"的灰字一飘,玩家只剩两条腿。寿命配冷却的账也要算:落影零冷却、归影走石头寿命,玩家可以反复落石反复归——真要限,限在"同屏只能有一枚",新石头落下的瞬间旧石头碎掉,锚点永远只有一个,玩家的归途永远清晰。落点的选择学是这套玩法的进阶课:石头落在开阔地,归位后四面来风;落在岩壁前,归位后背靠墙只防一面——落影那一刻想的是"逃",就要连"逃到之后怎么打"一起想。和闪现类技能的分账最后写清:闪现是"往哪都行但要预判",留影是"只能回家但零思考"——一个考手速一个考布局,留影石把考题从反应挪到了落子,落子落得好的玩家,狼的爪子永远追着一个已经不在原地的人。
闪现和留影的分账写进教学:闪现要预判、要手速,留影要提前落子、要布局——一个把难度放在按下去的那一瞬,一个把难度放在按下去之前的那几秒。进阶的落子还有一层骗术:石头落在明处的开阔地,狼怪守着石头堵你,你偏不归,遛去它背后——留影石的威慑不在石头本身,在"玩家随时可以走"这个可能性上,狼被这个可能性牵着分神,玩家的每一次贴近都成了试探。石头可被推动这条特性是双刃:狼拱着石头挪位,你的归点就跟着危险起来——落子在狼够不着的地方,是这门手艺的第一次升级。石头碎了别恋战——留影石的退路永远只有一条,会丢的人才分得清哪一次该丢、哪一次该留。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…
【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…
【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…
【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…
【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…
【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…