【游戏功能】
天上掉石头不可怕,可怕的是不知道往哪儿躲——悬石的机制把答案画在了地上:石头落下前,地上先长出影子,影子长圆的那一刻,石头就到了。看影子落点,别站在圆里——六个字,就是这门功夫的全部。今天拆悬石,看"天降系"怎么把头顶的威胁,变成一场看影子的落点游戏。
一、生影、坠落、溅账三段
悬石的循环三段。生影段:头顶的石头脱手,地上同步长出一圈阴影,影子从一个小点慢慢长圆——生影段是全技能的预告:影子是石头的落点坐标,它长多大、长多快,就是石头给你的全部信息——读懂影子的人,提前一秒就知道该不该跑。坠落段:一秒一到,石头从天而降砸进影子里,尘土崩起半人高——坠落段是全技能的执行:落点是死的,砸的是影子里的人,影子里没人就只砸出一声闷响。溅账段:落点的溅射圈里,站着的狼怪跟着挨四十五——溅账段是全技能的余味:悬石砸不到你,你可以引它砸别人——把落点引到怪堆边上,溅射圈就是你的账本。三段的核心是"影即落点":石头在天上飞的时候,它的命运已经写在影子里了。
完整演示在这,默认自动循环:
fx-fallshadow
二、幂尔框架实现:影子是一枚先行的坐标
悬石的账本两笔:影子先行、石头后到——
local FallShadow = {}
local SHADOW_T = 1.0 -- 影子一秒长圆
local SPLASH_R = 65 -- 溅射圈
local ROCK_DMG = 45
local rocks = {}
function SL:DropRock(x)
table.insert(rocks, { x = x, t = SHADOW_T })
SL:ShowTipAbove(x, "影")
end
function SL:OnTick(dt)
for i = #rocks, 1, -1 do
local r = rocks[i]
r.t = r.t - dt
SL:DrawShadow(r.x, 1 - r.t / SHADOW_T) -- 影子渐长
if r.t <= 0 then
SL:RockFall(r.x)
SL:RingAt(r.x, SPLASH_R, "#c9a06a")
for _, w in ipairs(SL:ActorsNear(r.x, SPLASH_R)) do
SL:HitActor(w, ROCK_DMG)
SL:ShowTipAbove(w, "-45 砸")
end
table.remove(rocks, i)
end
end
end
return FallShadow
影子先行是全技能的魂:石头还在天上飞,影子已经把答案画在了地上——先行的影子就是这门功夫免费发的考卷。
三、坠落的演出规格
影子是全技能的考卷:一圈阴影从点长圆、边缘一圈土黄的环——影子要"长",长出来的影子才有倒计时的实感,凭空出现的圆是警告不是预告。石头的下坠要"跟影":石头实体从影子正上方按影子的进度同步下落——影长一半、石到一半,影和石的两条线叠在一条时间轴上。落石的三件套:尘土崩半人高、六像素震屏、土黄的"落石"大字——落石的分量全靠这一套崩塌感撑着,落石不是掉物,是塌方。溅射圈要"画":落点炸开一圈土黄的环线,环内是溅射的账本范围——环画一圈,账本的范围就一目了然。
四、定价与三条影规
天降系的定价一句话:影子一秒、砸四十五、溅射一圈六十五像素——四十五的账全砸在影子里的人头上,影外的人连风都吹不着。三条影规:其一,影生石生影灭石灭——影子走完它的一秒石头必然落地,影子和石头是同一件事的两个阶段;其二,溅射不认敌我——砸中的狼怪挨四十五,站进圈里的你也挨四十五,溅射圈的账本一视同仁;其三,落点不追人——影子长在哪儿石头就落哪儿,跑到天边它也不改道,天降系的骨头是"不追踪"。与红圈预警对照着看:同是"地上画圈提醒",红圈是"圈内将有伤害"的减法提示——离开就完事;悬石的影子是"这是落点"的加法预告——圈内必有石头,天降系的两个门派在"劝你走"还是"告诉你来"上分了家。
五、天降系的引石学:让天上的石头变成地上的账本
悬石真正高级的地方是把"躲避技"和"输出技"缝在了一起:对新手它是躲影子的走位课,对老手它是一枚可以定向引爆的炮弹——把落点引到怪堆边上,溅射圈就成了全队共享的账本。老玩家的引石有一套算术:怪追你的时候它的路径是可预测的,把石头引在它路径的前一格,砸中的概率比自己瞄准还高。对观战者,影子和石头一上一下的呼应是全场最有节奏感的画面:影子长圆、石头落地、尘土溅到怪身上——三帧讲完一个完整的因果。工程收尾记一笔:影子的大小要和石头的伤害范围严格一致——影子画小了是欺诈、画大了是送分,影子的诚实就是这门功夫的公平。最后留给数值组的一句话:四十五对一秒的影子,账面适中——天降系的收益在"引"字里,会引的人眼里没有天灾,只有没花钱的空袭。\r\n\r\n悬石的影子还有一手连落的读法:石头会成串地落——三块石头的影子次第长开,先落头一块的落点,就占住了后两块的看台——影子串连起来读,就是一张三连拍的落点时刻表。会读的人在三块石头的缝隙里穿行,像一个走在雨点间隙里的人,浑身上下干干净净。
写完再留一句给做天降系的同学:落石最容易做成"随机砸",而它本该是一场影子先行的因果戏——影要长得出预报、石要砸得有分量、溅要溅出账本圈,因果画在了地上,玩家才肯把躲石头玩成引石头。
补一个演示彩蛋位:石头砸进地里的那半秒,影子的圆心会留一块颜色更深的湿印——湿印慢慢干掉的过程,就是这块地"刚挨过砸"的余温,余温散了,下一块影子正好长圆。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…