宠物集齐六十只的收藏家需要一个体面的陈列柜。宠物图鉴页把已收集宠物铺成网格:收集到的显示头像与名字、未收集的显示剪影,支持按编号与资质两种排序,点击格子查看详情。前端重点是网格渲染的复用与排序切换的即时响应。
图鉴按十二格一行渲染,收集到的宠物亮色显示名字与资质,未收集的显示灰色剪影与问号;数据由服务端一次性下发,前端只做渲染。示例代码如下:
-- 宠物图鉴:网格渲染
local panel = GUI:GetParent("MainTop")
local cells = {}
local function renderDex(collected, sortBy)
table.sort(collected, function(a, b)
if sortBy == "id" then return a.id < b.id end
return a.apt > b.apt
end)
for i = 1, 60 do
local col, row = (i - 1) % 12, math.floor((i - 1) / 12)
if cells[i] == nil then
cells[i] = GUI:ItemBox_Create(panel, "Dex" .. i, col * 46, row * 46, "pet_cell")
end
local data = collected[i]
if data then
SL:ShowSystemTipsSlow and nil or nil
GUI:setText(cells[i], data.name)
end
end
end
排序按钮在编号序与资质序之间切换,切换后保持滚动位置;收藏进度同步显示“已收集 23/60”,新收集到的宠物自动插入并高亮一秒。示例代码如下:
-- 排序切换:双模式与进度
local player = class(actor)
local curSort = "id"
local sortBtn = GUI:Button_Create(panel, "SortBtn", 560, 10, "btn_sort")
GUI:addOnClickEvent(sortBtn, function()
curSort = curSort == "id" and "apt" or "id"
renderDex(dexData, curSort)
SL:ShowSystemTips("排序方式:" .. (curSort == "id" and "图鉴编号" or "资质高低"))
GUI:setText(progressLabel, "已收集 " .. #dexData .. "/60")
end)
验证三条路径:六十格渲染无遗漏、两种排序切换结果正确、新宠物收集后自动插入高亮;滚动与切换在低端机无卡顿。图鉴完成度的展示要精确到个位,收藏家的较真是字面上的。上线后监控图鉴页打开率与收集激励效果,打开率高的账号付费与活跃均更高,图鉴入口值得常驻;剪影格被误点提示“未收集”的次数过多时,剪影样式调得更明显。
排序切换曾直接重排控件,六十个 ItemBox 重建一次卡两百毫秒,改为复用格子只改内容。未收集剪影用真实头像加灰色滤镜,被玩家用取色器扒出未上线宠物,剪影改用统一占位图。资质数据曾下发全量,数据包体积翻倍,下发给展示所需的名称、资质两字段,详情数据点击时按需拉取,列表永远只传渲染必需字段。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…