榜单只显示名字和数值,玩家想知道榜一大哥的装备评分就得私聊问。排行榜详情页补上这层:点榜单条目上行排名号,服务端返回该名次的详细数据,详情面板展示等级、职业、行会与评分五项,返回按钮带 500 毫秒防连点。详情页的价值在把榜单从数字变成人物:点开榜首能看到成色与评分,榜单的竞争感自然升温。
点击榜单条目上行排名号,详情数据经 7331 消息返回后打开详情面板,五项字段分别填充对应控件。
local nameText = GUI:Text_Create(detailPanel, "DtName", 20, 40, 15, "#FFD700", "")
local scoreBar = GUI:LoadingBar_Create(detailPanel, "DtScore", 20, 120, "ui/scorebar", 1)
SL:RegisterLuaNetMsg(7331, function(data)
GUI:Win_Open("ui/rank_detail")
GUI:setText(nameText, "No." .. data.rank .. " " .. data.name)
GUI:setText(infoText, data.job .. " · " .. data.guild .. " · 评分 " .. data.score)
GUI:LoadingBar_setPercent(scoreBar, data.scorePct)
end)
local function onRowClick(rank)
SL:SendNetMsg(7332, rank, 0)
end
返回按钮切回主榜单界面,500 毫秒内的重复点击直接忽略,防止界面栈被连点堆出一串重复面板。
local backBtn = GUI:Button_Create(detailPanel, "BackBtn", 20, 300, "ui/back")
local lastClick = 0
GUI:addOnClickEvent(backBtn, function()
local now = os.clock()
if now - lastClick < 0.5 then return end
lastClick = now
GUI:Win_Open("ui/rank_main")
end)
点击到详情展示的全链路耗时控制在 500 毫秒内;离线角色的详情返回占位数据并提示快照时间;返回后主榜单的页签与滚动位置保持原样。请求详情的消息补了服务端频控与排名合法性校验,伪造排名号刷接口的路径被堵死。详情页与榜单页的配色统一走主题表,界面换肤时两页同步变化。榜单前一百名之外的详情请求返回提示引导玩家先上榜,避免无限量级的详情查询。监控详情页的打开率与返回耗时,打开率高说明榜单信息密度确实不够。
详情数据是实时查询,榜单第一名的详情被连续点开一百次,服务端被迫加了 5 秒详情缓存,快照时间戳随数据下发标注。离线超过 30 天的角色详情字段缺失,面板打开一半空白,缺字段时统一填占位文案。防连点的时间戳用秒级精度,500 毫秒窗口内毫秒部分全是 0,连点拦截形同虚设,换成 os.clock 浮点比较。Win_Open 打开的详情面板叠在榜单之上,返回主榜时旧的详情面板没有关闭,界面栈里堆了十几层,返回动作改为先关详情再开主榜。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 付费玩家的付费点集中在商城,成长线里缺一个长期投入的钩子。成长基金让玩家在低等级时一次性买入,随等级提升…
实战应用:用在哪里 行会联赛打得不热闹,观战人数不到参赛人数的一半。联赛竞猜给观战者一张入场券:用竞猜币押注胜负,赔率随投注…
实战应用:用在哪里 七夕限时活动原计划七天,上线第二天下午整点活动面板突然关闭,奖励领了一半,玩家以为被砍了福利,两小时内工…
实战应用:用在哪里 HTTPS 证书过期一次,全服登录白屏了半个多小时,值班才发现证书没人管。证书续期机制把到期日写进系统变…
实战应用:用在哪里 从行会面板点进成员列表再点开个人名片,连按返回键直接退回了主城,中间两层界面全部跳过。界面堆栈管理用一张…
实战应用:用在哪里 限时商城的稀缺商品上架即被抢,玩家错过窗口感觉被区别对待。商城橱窗把每件限时商品的下架时间做成可视化倒计…