【游戏功能】
先抛一个坑:锣明明是挂在天上敲的,声怎么是往下砸的?砸下来的到底是声,还是别的什么?这篇把鸣锣纹整套写法拆开:落锣、一槌、声浪砸顶、耳鸣挥空,一段一段照抄能跑。
一、效果演示
演武场是一座钟鼓楼底,怪走进来站定。点「鸣锣!」——一面铜锣从天垂降到怪的头顶上方,停稳半拍,一槌敲响:十八点声浪从锣面直直砸下来,砸得怪两秒耳鸣,期间它的爪爪挥空。锣响完升回天上去,十二秒再降。声浪砸顶的那一下,半屏都是金色的涟漪。
flowchart TD
A[鸣锣!] --> B[铜锣垂降头顶]
B --> C[停稳半拍]
C --> D[一槌敲响]
D --> E[声浪砸顶 十八点]
E --> F[耳鸣两秒]
F --> G{耳鸣散了吗}
G -- 没有 --> H[它挥空]
G -- 散了 --> I[锣升 十二秒再敲]
H --> G
fx-crest-gongstrike
二、底层原理
鸣锣纹的机关是「声是有分量的」——锣挂在怪的头顶上,敲响那一下声浪不是往四下散的,是直直往下砸的:十八点从锣面砸到头皮。这条机关的道理在「声源的高位」——声从头顶来,就往头顶去,砸的位子比锣面更要紧。砸完附赠两秒耳鸣:怪的出手口读着耳鸣量,读着就挥空,锣声的余威全在这两秒里。落锣要有个停稳的半拍,锣不稳就敲,砸下来的是锣不是声。幂尔框架这边,锣只放一个高度量加一个拍号量,耳鸣是敲响那一拍附赠的一份时辰量。
这套玩法的代码量不到七十行,难的不是敲锣那一下,难的是声从高位来就往高位去——砸的位子对了,声才有分量。
金色的涟漪给了「声浪」一个看得见的砸法:一圈一圈从锣面往头皮压下去,涟漪压到底,十八点也到了——声怎么走、账怎么记,画在同一条线上。
再补一句关于槌法的话——敲锣那一槌不是砸下去的:槌子先扬到锣面斜上方,贴着锣边一抹,锣声是被「抹」出来的。抹得正,声浪直;抹得偏,声浪斜着散、伤也跟着散三分。槌法藏在那一抹里,玩家看得见槌子的走向,就猜得出这一声正不正。
再补一句关于回音的话——锣声砸完还有一层余音贴着地皮走一圈:从锣的正下方起,一圈矮矮的金线沿着场边滚出去,滚到场角散掉。这圈地皮上的余音和高处的涟漪是一声的两半:高处的管伤,地上的管势——余音滚到脚边那一下,怪总要缩一缩脖子,缩的那一下就是它认了这一声。
锣收上天的时候槌子还朝下虚点一下,像是行了个礼,这一下虚点也算这套锣的礼数。
三、核心代码:完整模块(上·骨架)
-- @file crest-gongstrike.lua
-- 鸣锣纹:锣在头顶敲,声浪砸下来
local M = {}
local CONST = { AUTOINC_BASE = 1215400 }
local _autoInc = 0
local function ShowTip(msg) if msg and msg ~= "" then SL:ShowSystemTips(msg) end end
local function GenID() _autoInc = _autoInc + 1 return CONST.AUTOINC_BASE + _autoInc end
function M.Ready() return true end
四、核心代码:完整模块(下·推进与卸载)
-- 每拍推进: 落锣一槌
if not _ticker then
_ticker = SL:Schedule(function(dt)
if _ring > 0 then _ring = _ring - dt end
if not _on then return end
_t = _t - dt
if _ph == 0 then
_gy = _gy + ((_my - 168) - _gy) * 6 * dt
if _t <= 0 then _ph = 1 _t = 0.22 end
elseif _ph == 1 and _t <= 0 then
_ph = 2 _t = 0.8 _ring = 2
ShowTip("一槌十八点——耳鸣两秒!")
elseif _ph == 2 and _t <= 0 then
_on = false
ShowTip("锣收了")
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("鸣锣!", function()
if _on then ShowTip("锣还没收") return end
_on = true _ph = 0 _t = 0.9 _gy = -260
ShowTip("鸣锣——锣落头顶!")
end)
end, 1.0)
function M.Deaf() return _ring > 0 end
function M.Unload() _on = false _ring = 0 end
return M
五、机制问答
问:声为什么往下砸?
答:声源在头顶——锣悬在怪的头顶上,声浪顺着位子直直下砸,十八点砸在头皮。
问:耳鸣的两秒它怎么样?
答:出手口读着耳鸣量——两秒里爪爪挥空,锣声的余威全在这。
问:锣为什么不落稳就敲?
答:要停稳半拍——锣不稳敲出来的是锣不是声,砸不准。
问:十二秒再敲管什么?
答:鸣锣的回气。
问:怪躲得开声浪吗?
答:躲不开——锣悬在它头顶,它挪锣跟,声浪钉着头皮来。
六、调参与实战怎么用
参数三个量——锣伤、耳鸣时辰、回气。十八点、两秒、十二秒是一组甜点位:一槌的响对得起两秒的哑,锣声的账两头都收。想调凶些把耳鸣抬到三秒——怪多哑一秒,锣伤可以降到十四找平,声比伤值钱的调法。
补一句设计层面的话——这六手都是「借物结账」:借球蹦三蹦、借锣砸一声、借箭钉一身、借跷高一段、借壶滴八滴、借钟递五音——物件摆在明处,账记在物件上,玩家看物即看账,比看数字踏实得多。
补一句维护层面的话——借来的物都要还:球要化带、锣要升天、箭要脱落、跷要落地、壶要收回、钟架要升——卸载口里一样一样物归原位。悬着不走的锣、插着不落的箭、降了不升的架,全是没还完的物。
补一句工程层面的话——物件类状态的位子和时辰只放一份:球只一份蹦数、锣只一份高度、跷只一份高差、壶只一份滴计、钟只一份序号,物件自己就是状态——找着物件就找着账,重载交接搬的是物件不是零碎量。
这一手在实战里的分量在「物件读秒」:球蹦到第几下、锣鸣还有几秒、身上插着几支箭、壶里养到第几滴、钟敲到第几口——物件替你记着时辰,会读物件的人不用背任何数。
反馈要成对:彩带配三响、涟漪配耳鸣、翠羽配脱落、跷影配高账、壶音配滴重、金光配音序——物件给一半,账面给一半,两头对上了玩家才踏实。
最后说实战:借物结账的纹,出手的时机在「物件就位」那拍——球到顶、锣停稳、气含足、跷踩定、壶悬正、架落稳,物件就位再结账,提前出的都是虚手。
写完留一句做音波系的同学:声源的高位定砸点——声从头顶来就往头顶去,位子对了声才有分量。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…