跳转到内容

HUD 界面

HUD 脚本归属整个模块:在模块编辑器头部点「HUD 界面」编写(与「初始化代码」并列),不占逻辑槽、不绑启动键,游戏连通时程序每 50 毫秒执行一次,只负责显示——在 Hud.Init 里声明节点,任何逻辑脚本都能用 Hud.* 更新它们;不能发键、不能 Sleep。HUD 是一扇贴在游戏客户区上的透明置顶窗口,点击穿透,只在游戏处于前台时显示(设置里可开「调试时始终显示」)。独占全屏看不到,请用无边框或窗口化。

坐标是虚拟单位:客户区高恒为 1080,宽按比例伸缩;anchor 取父节点(默认整个客户区)九个锚点之一,x/y 是相对锚点的偏移。同一个 id 重复声明只会更新,不会重复创建;一次性声明放进 Hud.Init。HUD 是矢量绘制的,跟随游戏窗口大小或设置里的「HUD 缩放」(50%–200%)放大缩小都不失真。

函数 用途
Hud.Init(fn) 只执行一次 fn,把节点声明放在这里。引擎只在模块内容改变(保存改过的模块)时重建,并继承原有节点的显隐,重新声明同名节点不会重播入场与音效。
Hud.Frame / Text / Bar / Icon(id, spec) 建或改一个框 / 文本 / 进度条 / 图标。spec 可含 anchor x y w h parent z hidden alpha color bg border borderw radius text size bold align shadow value dir spark texture icon rotation mirror glow sound exitsound smooth enter exit loop。
Hud.Texture / Ring / Sprite(id, spec) 材质(内置 WeakAuras 材质库,白色蒙版按 color 着色、可 rotation / mirror)、环形 / 饼形进度(thick from to ccw inverse)、定格动画(texture rows cols frames fps mode)。
Hud.Sound(name) / Hud.StopSound() / Hud.Countdown(id, s) 播放 / 停止内置音效(可传表 { name, volume, loop, every },停止可淡出);节点的 sound / exitsound 在显示 / 隐藏时自动播。Hud.Countdown 读秒(借 BigWigs):每拍传剩余秒数,剩余 5..1 秒各读一次语音(voice 可选 Jim / David / Amy)。
Hud.Set(id, key, value) 改一个属性;也可传表一次改多个。节点带 smooth = 毫秒 时数值 / 颜色变化按临界阻尼弹簧平滑到位(约 smooth 毫秒到位,脚本每拍改目标也不顿挫)。
Hud.Animate(id, {k = v}, ms, ease) 把位置、尺寸、透明度、进度、字号、旋转、颜色补间到目标值(默认 300 毫秒、outCubic)。
Hud.Show(id, bool)
Hud.Remove(id) / Hud.Clear()
显隐、删除(连带子节点)、清空全部。入场 / 出场与音效在每轮脚本结束时按净变化结算:同一轮建了又藏不会出现也不会响,藏了又显等于没动。
Hud.Flash(id, color, ms) 一次性闪光提醒(默认白色 400 毫秒)。
Hud.Loop(id, spec) 设 / 清持续动效(等价于 loop 键):breathe、blink、bounce、float、shake、beat;不给参数为 breathe,false 清除。
Hud.Pulse(id, on) / Hud.Blink(id, on, ms) 持续呼吸 / 闪烁的开关式旧接口;声明式请用 loop。
Hud.Screen() / Hud.Visible() 客户区的虚拟尺寸 / 覆盖层当前是否显示。

示例:血量条 + 战斗提示 + 图标。属性名须与属性表一致(这里用预置的「生命百分比」「战斗中」):

-- 模块 HUD 脚本:不绑键,每 50 毫秒运行一次;只负责显示,不能发键或 Sleep。逻辑脚本可用 Hud.* 更新这里声明的节点
Hud.Init(function()
Hud.Bar("hp", { anchor = "TOP", y = 140, w = 360, h = 22, color = "#2ecc71", bg = "#00000099", radius = 6, smooth = 150 })
Hud.Text("hpText", { parent = "hp", anchor = "CENTER", size = 16, color = "#ffffff", bold = true })
Hud.Text("combat", { anchor = "TOP", y = 100, size = 28, color = "#ff4d4d", bold = true, text = "战斗中", hidden = true, enter = "pop", exit = "fade", loop = "breathe" })
Hud.Icon("power", { anchor = "TOPRIGHT", x = -40, y = 140, w = 28, h = 28, icon = "zap", color = "#3fa9f5" })
end)
local hp = Prop("生命百分比") -- 0~1
Hud.Set("hp", "value", hp)
Hud.Set("hpText", "text", string.format("%d%%", math.floor(hp * 100)))
Hud.Set("hp", "color", hp < 0.3 and "#e74c3c" or "#2ecc71")
if hp < 0.3 and CoolDown("hud.lowhp", 1000) then Hud.Flash("hp", "#ffffff", 400) end
local fighting = Prop("战斗中") > 0
Hud.Show("combat", fighting)

颜色写 #RRGGBB 或 #RRGGBBAA;string.format("%d") 要整数,小数先 math.floor。脚本连续出错 3 次会停用 HUD,改好保存后自动恢复。上限:200 个节点、文本 256 字。

动效:enter / exit 写预设名 fade、slideLeft、slideRight、slideUp、slideDown、zoom、pop(或表 { kind = "slide", dir = "left", dist = 80, ms = 250, ease = "outBack" }),节点显示 / 隐藏时自动播放,缩放会带着子节点一起;进度条给 smooth = 150 就不再随 50 毫秒的脚本节拍跳变。持续动效写 loop:breathe(呼吸)、blink(闪烁)、bounce(弹跳)、float(漂浮)、shake(抖动)、beat(心跳缩放,子节点一起),或表 { kind = "bounce", dist = 12, ms = 800 },节点可见时循环、隐藏即停。缓动可选 linear、inQuad、outQuad、inOutQuad、inCubic、outCubic、inOutCubic、outBack、outElastic、outBounce。所有动画由渲染侧逐帧求值,没有动画时不出帧。

材质与音效:内置从 WeakAuras 与 BigWigs 移植的 201 个材质(形状、环、渐变、进度条纹理——含 BigWigs 的 Smooth / Glaze / Charcoal、光束与 PowerAuras 光环 / 图案 / 文字)和 175 个音效(提示音、动物声、「Voice:」语音、BigWigs 的 Amy / David / Jim 读秒与整段倒数音轨等),名字见 AI 规范或编辑器下拉。Hud.Texture 画材质(蒙版按颜色着色、可旋转 / 镜像 / 去色,loop = "spin" 持续转);进度条给 texture = "Statusbar_Stripes" 用纹理填充、spark 加火花;Hud.Ring 是矢量环形 / 饼形进度(起止角、逆时针、反向做冷却倒计时);Hud.Sprite 用 stopmotion 图集播定格动画(循环 / 往返 / 一遍 / 按进度)。文字加 shadow 阴影更易读,任何有尺寸的节点加 glow 像素发光。节点的 sound 在显示时播、exitsound 在隐藏时播(隐藏会停掉循环),Hud.Sound / Hud.StopSound 显式控制,Hud.Countdown(id, 剩余秒数, { voice = "Jim" }) 读秒(每个整秒只读一次,计时重置不重读);设置页「HUD 界面」卡可关闭音效、调音量;可视化编辑期间节点音效静音,只有「试听」出声。

可视化编辑:HUD 脚本的编辑器有「代码 / 可视化」两个标签页。可视化页是一块按游戏客户区比例缩放的模拟画布(与真实覆盖层共用同一套布局与绘制代码,比例一致),可以添加框 / 文本 / 进度条 / 图标 / 材质 / 环形进度 / 定格动画、拖动移位、右下角手柄缩放、方向键微调,右侧面板改锚点、尺寸、字号、颜色、文字、材质(带缩略图)、旋转、环形与定格参数、音效(可试听)与入场 / 出场 / 持续动效;改动直接写回代码里的字面量并实时预览,写成表达式的属性只能改代码。新建的 HUD 脚本默认为空,从「添加」开始即可。