聊天面板与大地图的缩放需求各自独立,全局一套缩放永远顾此失彼。独立档位方案:每个界面三档缩放,选择写入本地存档,重登后按界面各自恢复,换设备不跟随,适配逻辑一次写对。
缩放按钮循环三档,按界面名分键存本地档位,切换即生效即保存。
local SCALES = { 1.0, 0.85, 1.15 }
local function cycleScale(winName, widget)
local cur = SL:GetMetaValue("UI_SCALE", winName) or 1
local next = cur
for i, s in ipairs(SCALES) do
if math.abs(s - cur) < 0.01 then
next = SCALES[i % #SCALES + 1]
break
end
end
GUI:setScaleX(widget, next)
GUI:setScaleY(widget, next)
saveLocal("scale_" .. winName, next)
end
界面打开时读本地档位,控件就绪后再应用,避免缩放作用在未布局完成的面板上。
GUI:addOnClickEvent(chatWin, function()
GUI:Win_Open("chat_panel")
SL:Schedule(function()
local s = loadLocal("scale_chat_panel") or 1.0
GUI:setScaleX(chatPanel, s)
GUI:setScaleY(chatPanel, s)
end, 0.1)
end)
三档循环与重登恢复各跑二十次,档位与记忆一致性全对才算过。埋点缩放使用率,某界面缩放使用率长期高于六成说明默认尺寸不适配主流机型,改默认值而不是等玩家调。
next在局部命名会遮蔽标准库函数,示例里可用,工程里换 nextScale 命名稳妥。缩放锚点默认中心,靠边界的界面放大后半截出屏,锚点要按界面位置选角。本地存档的键按界面名拼接,界面改名后旧档位成孤儿,改名流程带档位键迁移。浮点比较用等值判断档位会失灵,零点零一容差比较是必须的,直接相等判断在浮点世界里靠不住。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 结婚是传奇里少数的"全服见证型"消费场景:玩家愿意为仪式感花钱,但仪式感的档位要拉开且各档都有体面——简约档不寒酸…
设计初衷 沙巴克攻城的荣誉需要一条可以触摸的兑现路径:战功商店用功勋货币把"为行会流血"折算成专属奖励。设计目标三条:功勋只…
底层原理 限频器(throttle)一刀切:窗口内只放一次,突发全拒。令牌桶是它的互补形态:桶以恒定速率生成令牌(每秒 2 …
设计初衷 货币系统的失控从不是一夜之间:金币产出每周悄悄多 5%,三个月后物价翻倍才被发现,追溯源头时账目早已混成一团。经济…
业务场景 沙巴克攻城前,行会会长发放集结令:会员凭令在开战前 30 分钟传送集结点,一令一人。令旗系统的三个环节:发放(按会…
底层原理 元表 __call 让一张表可以像函数一样被调用:call(table, args) 触发时,Lua 先查表的 _…