限时商城的稀缺商品上架即被抢,玩家错过窗口感觉被区别对待。商城橱窗把每件限时商品的下架时间做成可视化倒计时:商品卡下方一行金色倒计时,归零自动置灰下架,点击购买上行请求,限购计数同步展示。倒计时直接挂在商品卡上,稀缺感与紧迫感同时可见,限时商品的下架前一小时成交量能占到全天四成。
每个橱窗位由商品格、价格文本与倒计时文本组成,倒计时用 Text_COUNTDOWN 驱动,归零回调把卡片置灰。
local function makeWindow(idx, x, y, goods)
local box = GUI:ItemBox_Create(panel, "Goods" .. idx, x, y, goods.img, idx, 1)
local price = GUI:Text_Create(panel, "Price" .. idx, x, y + 52, 13, "#FFFFFF", goods.price .. " 元宝")
local cd = GUI:Text_Create(panel, "Cd" .. idx, x, y + 74, 12, "#FFD700", "")
GUI:Text_COUNTDOWN(cd, goods.left, function()
GUI:setText(cd, "已下架")
SL:ShowSystemTips("限时商品 " .. goods.name .. " 已下架")
end, 1)
GUI:addOnClickEvent(box, function()
SL:SendNetMsg(7341, idx, 0)
SL:ShowSystemTips("购买请求已提交")
end)
end
服务端推送上架清单,前端按清单重建橱窗位,倒计时按每件商品的剩余时间独立驱动,限购余量同步展示。
SL:RegisterLuaNetMsg(7342, function(data)
for i, g in ipairs(data.goods) do
makeWindow(i, 40 + (i - 1) * 90, 100, g)
if g.limitLeft then
GUI:setText(limitText[i], "限购余量 " .. g.limitLeft)
end
end
end)
三件限时商品的倒计时分别核对到秒;归零置灰后购买请求被服务端拒绝并回执提示;限购余量购买一件减一件。倒计时归零的瞬间与商品实际下架时刻的偏差不超过一秒,两端以同一下架时间戳为基准。九件橱窗位同时驱动倒计时,界面刷新无掉帧,控件数量与文本更新频率都在预算内。监控橱窗倒计时的归零时刻与服务端下架时刻的偏差,超过两秒就要校对两端时钟。
倒计时回调里访问了面板级变量,橱窗重建后旧回调仍持有旧控件引用,回调入口判空后才安全。限购余量在下单成功后没有即时扣减,玩家连买两件被第二单拒绝却看着余量还有一,余量以服务端回执为准刷新。倒计时的剩余时间按服务端下发剩余秒数起算,客户端本地时钟被改快后倒计时提前归零,起算点改为取服务器时间。商品图贴图路径下发错误时 ItemBox 显示空白格,空图资源做了统一占位图兜底。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 明拍容易被大号威慑,普通玩家不敢出手。秘宝暗拍改为全服暗标:每周一件秘宝,玩家密价投标一次,截标前互相看…
实战应用:用在哪里 充值返利活动被风控规则误判成套利,480 个大额充值账号被批量封禁 24 小时,申诉两小时破千条。误封风…
实战应用:用在哪里 五人小队打沃玛教主,队友的血量状态只能靠点头像逐个看,集火转火慢半拍。小队血条在屏幕侧边紧凑排布四条队友…
实战应用:用在哪里 好友申请藏在好友面板的角标里,玩家半天不看一眼,申请积压让社交转化掉了一半。好友申请浮窗把新申请推到屏幕…
实战应用:用在哪里 矿洞产出人人有份等于人人不重视,矿位租赁把矿洞变成可经营资产:矿位按 24 小时租给个人或行会,产出归租…
实战应用:用在哪里 击杀 BOSS 后要同时做三件事:发奖励、记流水、刷新排行榜,全都写在 killmon 触发里互相拖累,…