聊天面板与大地图的缩放需求各自独立,全局一套缩放永远顾此失彼。独立档位方案:每个界面三档缩放,选择写入本地存档,重登后按界面各自恢复,换设备不跟随,适配逻辑一次写对。
缩放按钮循环三档,按界面名分键存本地档位,切换即生效即保存。
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…