【游戏功能】
先抛一个坑:为什么觉醒类玩法总让人掐着秒表玩?金身八秒,玩家在这八秒里把一年的手速都打出来了——觉醒是养成玩法的情绪顶点,也是时序设计最抠细节的一段:什么时候能开、开了多强、什么时候褪、褪了怎么续,四问答案齐了这套玩法就立住了。这篇把金身觉醒整套写法拆开:蓄能、觉醒、金身推进、褪去回环,一段一段照抄能跑。
一、效果演示
演示场侠客与巨兽对刀。每中一刀纹能涨十六点,头顶能量条看着涨。喝满一百后点「觉醒!」:金屏一闪身周金光罩体,三粒金点绕身运转,攻速直接翻倍——零点七秒一刀,刀重二十六,头顶一圈金色倒计时环走着八秒。环走完金身褪去,状态栏报一声"金身褪去",能量条从零重新蓄。巨兽换了一只又一只,金身窗口就是输出榜的分水岭。
flowchart TD
A[砍中一刀] --> B[纹能加十六]
B --> C{喝满一百}
C -- 没满 --> A
C -- 满了 --> D[点觉醒]
D --> E[金屏闪 金光罩体]
E --> F[金身推进八秒]
F --> G{时间到了吗}
G -- 否 --> F
G -- 是 --> H[褪去 清零重蓄]
H --> A
fx-crest-awaken
二、底层原理
金身觉醒的机关是"蓄能攒窗口,窗口内换一套账"——平时一刀十四一点四秒一拍,金身里一刀二十六零点七秒一拍,攻速翻倍刀重接近翻倍,八秒窗口的输出是平时的三倍多,这一笔账就是玩家掐秒表的原因。窗口的推进用计时器每拍扣剩余时间,头顶倒计时环就是剩余时间的可视化——环走一圈金身结束,玩家看环不用看表。
觉醒的演出要点在"换一套画面语言":金光罩体、金点绕身、倒计时环,三件套一上身谁都看得出现在是爆发态。褪去的时机设计有讲究——窗口结束的瞬间立刻褪,不留残光尾巴,因为玩家在为下一轮蓄能做心理重置,拖泥带水的褪场会让节奏含糊。蓄能期和金身期的能量条互不干扰:金身里砍的刀不再喂能,褪去后从零蓄——窗口的纯粹性就是它的价值。幂尔框架这边攻速和刀重的切换收在两个取值函数里,金身标记一翻两个函数一起换价。
这套玩法的代码量不到一百行,难的不是变身而是窗口的纯粹——金身里不喂能、褪去即清零,窗口才有分量。
再看觉醒入口的拦截次序——为什么先查"金身进行中"再查"纹能不够"?因为两个拦截的语义不同:金身中点觉醒是重复操作,提示要轻;纹能不够是条件不足,提示要带进度"六十四/一百"告诉玩家还差多少。次序反了会出现金身中报"纹能不够"的糊涂提示——明明在爆发态却喊能量不足。拦截提示的措辞也是玩法的一部分:每一句都替玩家把下一步想好,点错的挫败感就变成了进度感。
三、核心代码:完整模块(上·骨架)
-- @file CrestAwaken.lua
-- 金身觉醒纹 —— 能量喝满变金身 八秒横着走
local CrestAwaken = {}
local CONST = {
MAX = 100,
PER_HIT = 16,
DURATION = 8,
CD_NORMAL = 1.4,
CD_AWAKEN = 0.7,
DMG_NORMAL = 14,
DMG_AWAKEN = 26,
AUTOINC_BASE = 1198900,
}
local _energy = 0
local _on = false
local _left = 0
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 CrestAwaken.IsOn() return _on end
function CrestAwaken.Energy() return _energy end
function CrestAwaken.Left() return _left end
-- 取值收口:金身标记一翻两个价一起换
function CrestAwaken.Dmg()
if _on then return CONST.DMG_AWAKEN end
return CONST.DMG_NORMAL
end
function CrestAwaken.Cd()
if _on then return CONST.CD_AWAKEN end
return CONST.CD_NORMAL
end
四、核心代码:完整模块(下·推进与卸载)
-- 觉醒入口:先查重复再查条件
function CrestAwaken.Awaken()
if _on then
ShowTip("金身进行中——趁热多砍几刀")
return
end
if _energy < CONST.MAX then
ShowTip("纹能不够——" .. _energy .. "/" .. CONST.MAX)
return
end
_on = true
_left = CONST.DURATION
_energy = 0
ShowTip("金身觉醒!八秒攻速翻倍")
end
if not _ticker then
_ticker = SL:Schedule(function(dt)
if not _on then return end
_left = _left - dt
if _left <= 0 then
_on = false
ShowTip("金身褪去——重新蓄力")
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("觉醒!", function()
CrestAwaken.Awaken()
end)
ShowTip("技能已加载: 金身觉醒纹")
end, 1.0)
function CrestAwaken.OnHit()
if _on then return end
_energy = math.min(CONST.MAX, _energy + CONST.PER_HIT)
if _energy >= CONST.MAX then
ShowTip("纹能喝满——点「觉醒!」变金身")
end
end
function CrestAwaken.Unload()
if _ticker then SL:Unschedule(_ticker) end
_energy = 0
_on = false
end
return CrestAwaken
五、机制问答
问:为什么先查金身进行中再查纹能不够?
答:两个拦截语义不同——重复操作轻提示,条件不足带进度,次序反了提示会自相矛盾。
问:金身里砍的刀为什么不再喂能?
答:窗口要纯粹——金身里还能蓄能,下一轮起算点就含糊了。
问:褪去为什么不留残光尾巴?
答:玩家在为下一轮蓄能做心理重置——拖泥带水的褪场让节奏含糊。
问:攻速刀重的切换收在哪里?
答:两个取值函数——金身标记一翻两个价一起换,别处一律走函数。
问:窗口输出为什么定在三倍上下?
答:攻速翻倍加刀重近翻倍,八秒攒一轮——三倍是"值得掐表"又不失衡的分量。
六、调参与实战怎么用
参数层面五个量——喂能速率、窗口时长、攻速档、刀重档、蓄能上限。窗口时长是情绪的标尺:五秒不够尽兴,十秒以上审美疲劳,八秒是掐表玩法的黄金档。喂能速率决定窗口频率:三分钟一次是技能,一分钟一次是节奏,按玩法的定位定。实战里这套蓄能开窗的骨架能搬去变身、狂化、天神下凡一切爆发态。常见坑两个:金身里喂能混账,窗口价值被稀释;褪去时定时器不卸载,重载后双计时器把窗口砍半。
补充一个设计层面的思考——纹章类玩法的设计核心是"期待感的节奏":每一次佩戴、镶嵌、升星、洗练都是一次开奖,开奖的间隔和反馈的强度决定玩家留不留下来。反馈要三层齐发:数字层(刀重变了几)、表现层(光效震屏飘字)、文案层(状态栏一句话说清发生了什么)。三层缺一层,玩家就觉得"点了没反应"。
补充一个维护层面的思考——纹章系统的数值全收在参数表里,概率、上限、每档加成一个数字都不许硬编码在流程里。策划调爆率、调保底、调加成,改表就生效,热重载立刻可见。状态变量收在模块闭包里,卸载入口归零——纹章这类带概率和计数的系统,脏状态残留是客诉的重灾区。
补充一个工程层面的思考——带概率的流程必须把概率计算收成单个函数,输入是计数输出是概率,别处一律调用不许自己算。这样策划要验概率分布、测试要回归、排查要复现,都只需要盯一个函数。概率散落在流程各处是这个品类事故的头号来源,收口一次受益全年。
写完留一句给做爆发系的同学:玩家掐的不是秒表,是窗口——八秒的纯粹换三倍的输出,这笔账立住了,觉醒就成了情绪的顶点。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…