聊天面板与大地图的缩放需求各自独立,全局一套缩放永远顾此失彼。独立档位方案:每个界面三档缩放,选择写入本地存档,重登后按界面各自恢复,换设备不跟随,适配逻辑一次写对。
缩放按钮循环三档,按界面名分键存本地档位,切换即生效即保存。
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…