战斗中身上挂着七八个增益:祝福、护盾、疾跑、中毒——BUFF 图标栏是状态的仪表盘。图标栏的要点是增益的排列规则、剩余时间的呈现与叠加层数的表达,一眼读懂身上的状态是战斗决策的前提。
---BUFF 栏:图标按类型分组排列
BuffBar.icons = {}
function BuffBar.sync(list)
-- list: 服务器推送的增益数组
BuffBar.clear()
local order = { buff = 1, debuff = 2 }
table.sort(list, function(a, b)
if order[a.kind] ~= order[b.kind] then
return order[a.kind] < order[b.kind]
end
return a.expireAt > b.expireAt
end)
for i, b in ipairs(list) do
if i <= 12 then
BuffBar.place(b, i)
end
end
end
图标的排列两维分组:增益与减益分列(增益在左减益在右),同组按剩余时长降序——快过期的排前面,玩家的注意力先给要消失的状态。同屏的图标上限 12 个:溢出的低价值增益折叠进「+N」的角标,界面的信息密度有上界。每个图标带叠层的角标:可叠加的增益(攻击强化叠 5 层)在右下角显示 5 的数字,层数的表达让叠加类增益的强度可见。
---剩余时间:秒数的颜色分级
SL:Schedule(0.5, function()
for _, icon in pairs(BuffBar.icons) do
local left = icon.expireAt - os.time()
if left <= 0 then
BuffBar.remove(icon)
else
local txt = SL:SecondToHMS(left)
GUI:Text_setString(icon.label, txt)
local color = left <= 5 and "#FF4444"
or (left <= 15 and "#FFAA00" or "#FFFFFF")
GUI:Text_setString(icon.label, txt)
BuffBar.color(icon, color)
end
end
end)
剩余时间的呈现按紧迫度分色:5 秒内的红色、15 秒内的橙色、其余白色,时间的颜色就是行动的信号——法师看着魔法盾转红就知道该补盾了。刷新的节奏 0.5 秒一轮,秒数的跳动平滑不过频。BUFF 的来源悬停可见:图标的悬停浮窗写明增益的名称、效果数值与来源(药水、技能、行会),状态的知情权完整。减益的呈现更醒目:中毒的绿框与眩晕的灰框,减益的识别优先级高于增益——危险的状态先被看见。
图标的同步与服务器状态的偏差抽样,本地显示与实际生效的错位即同步缺陷;刷新的帧耗时监控,12 个图标的更新不超 1 毫秒。
图标的排序曾经按获得时间,新加的减益排在末尾被增益淹没,分组加时长的排序修复。剩余时间的颜色曾经全白,过期的增益悄悄消失玩家没感知,颜色的分级让紧迫可读。图标的移除曾经只删控件不清池,池的泄漏让长在线的界面越来越慢,移除的成对清理。
图标的位置与分组规则进皮肤配置,职业的特化图标(道士的毒、法师的盾)按模板扩展。悬停浮窗的效果描述与数值表同源,说明的准确性与数值一致。BUFF 的拖拽排序支持玩家自定义,个人习惯的布局被尊重。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 两百毫秒延迟下放技能,按下按钮到技能出手之间的空窗让操作手感大打折扣。弱网补偿方案:客户端对移动与普攻做…
实战应用:用在哪里 每个技能都有冷却时间,散落在各处的冷却判断让代码难以维护。统一冷却管理框架把所有技能的冷却计时收拢到一个…
实战应用:用在哪里 每个技能都有冷却时间,散落在各处的冷却判断让代码难以维护。统一冷却管理框架把所有技能的冷却计时收拢到一个…
实战应用:用在哪里 检测到异常交易后需要立即冻结资金防转移:冻结操作把目标账号的交易功能暂停并冻结背包金币,冻结后给安全组留…
实战应用:用在哪里 混沌麒麟的召唤是全服瞩目的高光时刻:入场特效做足仪式感——全屏暗幕、金光裂缝、麒麟踏火登场三段演出,特效…
实战应用:用在哪里 好友动态流让社交系统有了"朋友圈"的感觉:好友获得成就、升到关键等级、击杀世界BOSS时自动推送到动态流…