[LUA-print] ----------------------------------------
[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"]:2156:
错误分析:代码中第790行调用了 `GUI:Button_setBright(btn, false)`,但 `btn` 变量为 `nil` 值。
问题根源:在 `ShowDestiny()` 函数中,通过 `GUI:getChildByName(PlayerEquip._ui.destiny_list, "btn"..k)` 获取按钮控件,但 `destiny_list` 可能不存在或 `btn1` 等子节点名称不匹配。
解决方案:
1. 检查 `destiny_list` 控件是否存在
2. 确保按钮名称与布局文件中的命名一致
3. 添加 nil 值检查
修改后的代码:
```lua
function PlayerEquip.ShowDestiny()
-- 展开天命界面
local ID = SL:GetMetaValue("MAIN_ACTOR_ID")
local Lv = SL:GetMetaValue("ACTOR_LEVEL", ID)
local rLv = SL:GetMetaValue("RELEVEL")
-- 检查 destiny_list 是否存在
if GUI:Win_IsNull(PlayerEquip._ui.destiny_list) then
SL:print("错误:destiny_list 控件不存在!")
return
end
GUI:addOnClickEvent(PlayerEquip._ui.destiny_btn, function()
local destiny_bg = PlayerEquip._ui.destiny_bg
if GUI:Win_IsNull(destiny_bg) then
return
end
local isVisible = GUI:getVisible(destiny_bg)
GUI:setVisible(destiny_bg, not isVisible)
if not isVisible then
GUI:setOpacity(destiny_bg, 0)
GUI:runAction(destiny_bg, GUI:ActionFadeTo(0.2, 255))
end
end)
for k, v in ipairs(PlayerEquip.destiny_config) do
local btnName = "btn"..k
local btn = GUI:getChildByName(PlayerEquip._ui.destiny_list, btnName)
-- 关键修复:检查按钮是否有效
if GUI:Win_IsNull(btn) then
SL:print("警告:按钮 " .. btnName .. " 不存在,跳过处理")
else
if Lv < v.level or rLv < v.rlv then
GUI:Button_setBright(btn, false)
else
GUI:Button_setBright(btn, true)
end
end
end
end
```
主要修改:
1. 添加了 `destiny_list` 控件的空值检查
2. 在循环中检查每个按钮是否有效
3. 使用 `GUI:Win_IsNull()` 判断控件是否存在
注意:请检查布局文件中 `destiny_list` 和 `btn1`、`btn2` 等按钮的名称是否正确。如果还是找不到控件,可能是布局文件导出时名称不匹配。