根据浮生梦老师前端课程内容,你代码中的`ErrorPrint(init)`函数在知识库中不存在,这可能是导致崩溃的原因。应该使用正确的延迟执行函数。
以下是修正后的代码:
```lua
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)
end)
```
主要修改:
1. 将`ErrorPrint(init)`替换为`SL:ScheduleOnce`,这是正确的延迟执行函数
2. 在延迟回调中检查`init`函数是否存在再调用
如果你没有定义`init`函数,需要确保这个函数存在或者改为调用你实际的初始化函数。