沙巴克攻城战里三面旗帜分立城门、广场与皇宫,旗帜血条与归属着色是攻守双方判断战局的核心信息。界面层要实时显示旗帜耐久、按占领行会着色,并在易主瞬间高亮提示。方案同样适用于野外据点与活动旗,逻辑一次写完三处复用。
每面旗帜对应一组控件:旗帜名、耐久条与归属色块,创建后挂到主界面顶层,收到的据点数据按编号填充。示例代码如下:
-- 创建旗帜信息控件组
local flags = {}
local function buildFlag(idx, name)
local panel = GUI:GetParent("MainTop")
local bar = GUI:LoadingBar_Create(panel, "FlagBar" .. idx, 30, 40 + idx * 30, "bar_bg", 0)
GUI:LoadingBar_setPercent(bar, 100)
local label = GUI:RichText_Create(panel, "FlagName" .. idx, 30, 20 + idx * 30, name, 200, 16, "#FFFFFF", 2, nil, "")
flags[idx] = {bar = bar, label = label}
end
服务端每 2 秒推一次三面旗帜的归属与耐久,着色按行会编号映射三种色值;归属变化时闪两次高亮,提醒攻守双方。示例代码如下:
-- 每 2 秒刷新归属与耐久,易主时高亮
local COLORS = {"#FF3333", "#33AAFF", "#FFCC00"}
local lastOwner = {}
local function onFlagSync(player, msgId, w1, w2, w3, sMsg)
local flagIdx = w1
local owner = w2
local hpPct = w3
local item = flags[flagIdx]
if item == nil then return end
GUI:LoadingBar_setPercent(item.bar, hpPct)
GUI:setText(item.label, sMsg .. " 耐久 " .. hpPct .. "%")
if lastOwner[flagIdx] ~= nil and lastOwner[flagIdx] ~= owner then
GUI:setText(item.label, "【易主】" .. sMsg)
end
lastOwner[flagIdx] = owner
end
SL:RegisterLuaNetMsg(9301, onFlagSync, nil)
双端联调验证:甲会打空城门旗耐久,百分比从 100 递减到 0,着色随归属切换;易主时文本前缀出现高亮标记。断线重连后三面旗帜数据应完整重刷一次。监控推送频率与界面刷新耗时,单次刷新超过 2 毫秒就把着色计算挪到服务端,前端只做展示。
耐久条方向参数传反,血条从右往左减,攻城时视觉上像在回血,方向参数补上后才正确。着色色值最初只分两色,第三家行会参战时显示成与守方同色,误导了整场指挥,色表扩到三色并写入配置。还有一次易主高亮没做去抖,归属在一秒内反复切换时文本狂闪,加了三秒冷却才稳定,高亮逻辑必须带时间窗。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…