GUI:addKeyboardEvent({"KEY_CTRL","KEY_TAB"}, function()
SL:Print("===== GUI热重载触发 Ctrl+Tab =====")
-- 1. 先关闭所有窗口,销毁界面实例
GUI:Win_CloseAll()
local unloadList = {}
-- 先收集要卸载的模块,不边遍历边删
for modName,_ in pairs(package.loaded) do
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-07-06 19:46:40 |
👁️ 阅读: 2
```lua
-- 根据浮生梦老师前端课程内容,热重载需要先关闭所有窗口再卸载模块
-- 使用正确的定时器函数:SL:ScheduleOnce 用于延迟执行
GUI:addKeyboardEvent({"KEY_CTRL","KEY_TAB"}, function()
SL:Print("===== GUI热重载触发 Ctrl+Tab =====")
-- 1. 先关闭所有窗口,销毁界面实例
GUI:Win_CloseAll()
local unloadList = {}
-- 先收集要卸载的模块,不边遍历边删
for modName,_ in pairs(package.loaded) do
local match1 = string.match(modName, "^ssr/ssrgame/")
local match2 = string.match(modName, "GUILayout")
if match1 or match2 then
table.insert(unloadList, modName)
end
end
-- 批量卸载
for _,modName in ipairs(unloadList) do
SL:Print("卸载模块:", modName)
package.loaded[modName] = nil
end
-- 延迟一帧执行初始化,给GC回收旧模块
-- 使用正确的单次延迟定时器函数
SL:ScheduleOnce(function()
-- 这里调用你的初始化函数
if init then
init()
end
end, 0.1) -- 延迟0.1秒执行
end)
```
**代码说明:**
1. `GUI:Win_CloseAll()` - 关闭所有打开的GUI窗口
2. `package.loaded[modName] = nil` - 卸载Lua模块
3. `SL:ScheduleOnce(callback, delay)` - 延迟执行初始化函数,确保旧模块被GC回收
**注意:**
- 确保`init`函数已正确定义
- 热重载后可能需要重新注册事件监听
- 如果模块中有全局变量,可能需要手动清理`_G`表
← 返回问答库