特效拉满的界面在旗舰机丝滑,在三年前的备用机上掉到二十帧。动效分级方案:前端监测帧率,持续低于阈值自动降级,粒子、抖动、长动画分层关停,画面朴素一点,流畅度换回来。
每秒采样帧率,连续五秒低于二十五帧判定低性能档,降级开关置位,各动效读档位行事。
local frames, lowSec = 0, 0
local perfTier = 0
SL:Schedule(function()
if frames < 25 * 1 then
lowSec = lowSec + 1
if lowSec >= 5 and perfTier == 0 then
perfTier = 1
SL:ShowSystemTips("已为您降低界面特效,提升流畅度")
end
else
lowSec = 0
end
frames = 0
end, 1)
SL:RegisterLuaNetMsg(8701, function() frames = frames + 1 end)
动效按代价分三级:一级关全屏粒子,二级关位移抖动,三级只保留透明度渐变,档位越高关得越多。
local function playEffect(name)
if perfTier >= 3 and name == "particles" then return end
if perfTier >= 2 and name == "shake" then return end
if perfTier >= 1 and name == "long_fade" then return end
playAnim(name)
end
三档机型各跑五分钟战斗,降级后帧率回升到三十帧以上才算过;降级提示只出一次。埋点各档位机型占比,低性能档超过两成说明下个版本的动效预算要收紧。
帧率计数靠消息驱动会漏计空闲帧,改用引擎每帧回调计数更准,示例的简化写法仅用于说明档位判定。降级要可逆:帧率回升持续六十秒自动回升一档,单向降级会让高配玩家卡在朴素模式。perfTier存内存即可,重登按机型基准重新判定,把降级状态持久化反而会误伤换了手机的玩家。动效清单要与特效组共同维护,程序单方面关停的动效,特效组往往不知情。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…