[LUA-print] LUA ERROR: target is nil value
[LUA-print] stack traceback:
[string "scripts/GUI/GUI.lua"]:101: in function 'CheckIsInvalidCObject'
[string "scripts/GUI/GUI.lua"]:1220: in function 'setVisible'
[string "GUILayout/N
根据错误信息,问题出现在第67行调用 `GUI:setVisible()` 时参数 `target` 为 nil 值。让我分析一下你的代码:
主要问题是在 `qiyifahshi.upmain()` 函数中,你直接使用 `ui.Button_3` 和 `ui.Image_1` 作为参数传递给 `GUI:setVisible()`,但没有确保这些控件对象存在。
**错误原因分析:**
1. 在代码中,你虽然有检查 `if ui.Button_3 and not GUI:Win_IsNull(ui.Button_3)`,但后面的 `GUI:setVisible(ui.Button_3, true/false)` 调用可能发生在控件实际为 nil 的情况下
2. 特别是第67行附近(根据堆栈跟踪),`GUI:setVisible()` 的第一个参数是 nil
**修改建议:**
```lua
function qiyifahshi.upmain()
local var = tonumber(lib:getstr("U32") or 0)
local ui = qiyifahshi.parent._ui
-- 先检查ui对象是否存在
if not ui then
SL:print("ui对象为nil")
return
end
if not GUI:Win_IsNull(ui.Text_1) then
GUI:Text_setString(ui.Text_1, "收集掉落的上古碎片" .. (var or 0) .. "/10个")
end
local completionFlag = tonumber(lib:getstr("U33") or 0)
local isCompleted = (completionFlag == 1)
-- 修改:增加更严格的nil检查
if ui and ui.Button_3 and not GUI:Win_IsNull(ui.Button_3) then
if isCompleted then
GUI:setVisible(ui.Button_3, true)
else
GUI:setVisible(ui.Button_3, false)
end
else
SL:print("Button_3控件不存在或为nil")
end
-- 修改:同样增加严格检查
if ui and ui.Image_1 and not GUI:Win_IsNull(ui.Image_1) then
if isCompleted then
GUI:setVisible(ui.Image_1, true)
else
GUI:setVisible(ui.Image_1, false)
end
else
SL:print("Image_1控件不存在或为nil")
end
-- 其他代码保持不变...
end
```
**关键修改点:**
1. 在函数开始时检查 `ui` 对象是否为 nil
2. 在每个控件操作前都进行 `if ui and ui.控件名 and not GUI:Win_IsNull(ui.控件名)` 的三重检查
3. 添加调试信息帮助定位问题
**调试建议:**
你可以在第67行附近添加调试信息,确认具体是哪个控件导致的错误:
```lua
SL:print("检查控件状态 - Button_3:", ui.Button_3, "Image_1:", ui.Image_1)
```
这样修改后应该能避免 `target is nil value` 的错误。下次写代码时要注意,所有使用 `GUI:` 开头的函数调用前,都要确保第一个参数(控件对象)不为 nil。