【游戏】
一、规则机制
隐蔽的坑:战斗回放列表只进不出,三个月前的回放还在占档,点开却因资源已变只剩黑屏。回放保留立三条:每条回放带时间戳,列表打开时清理超过七天的记录,过期记录的回放文件同步删除;保留数量上限二十条,超出挤掉最旧的;被玩家收藏的回放豁免清理,收藏是玩家主动留下的记忆。清理动作挂在列表打开时执行,不占后台资源。
二、错误写法
-- 错误:只加不清,过期回放点开黑屏
function saveReplay(replay)
table.insert(replays, 1, replay)
end
三、正确写法
local KEEP = 7 * 86400
local CAP = 20
local function cleanReplays(list)
local now = os.time()
local keep = {}
for _, r in ipairs(list) do
local expired = now - r.at > KEEP
if r.favored or #keep < CAP then
keep[#keep + 1] = r
elseif expired then
removeReplayFile(r.id)
end
end
return keep
end
四、边界处理
超期记录清理并删档;收藏豁免清理;数量封顶挤掉最旧的未收藏项。
五、FAQ
问:保留多久合适?
答:七天兼顾回看需求与档位压力,可配置。
问:收藏的也会被挤掉吗?
答:不会,收藏项豁免清理与数量挤占。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 闭包工厂的本质就这一行: 外层函数接收配置,返回一个闭包——闭包捕获配置,后续调用使用捕获的配置——闭包工厂的…
【语法算法】 闭包工厂的本质就这一行: 外层函数接收配置,返回一个闭包——闭包捕获配置,后续调用使用捕获的配置——闭包工厂的…
【语法算法】 泛型 for 的四种形态就这两行: 泛型 for 的四种形态覆盖了 Lua 所有的遍历需求——从无序遍历到有序…
【语法算法】 string.find 的起始偏移就这一行: 第三个参数 init 是搜索的起始偏移——从字符串的第 init…
【语法算法】 CPU 时间和墙钟时间的分界就这两行: os.clock 返回 CPU 时间——程序实际占用处理器的秒数——o…
【语法算法】 元方法 __unm 的触发就这一行: 对带 __unm 的表做一元负号操作 -t 时,Lua 调用 __unm…