你的Lua日志显示了一个常见的GUI错误:`GUI:Effect_Create ID is exists` 和 `target is nil value`。
从错误堆栈可以看出,问题出现在 `GUILayout/custom/module/WuXingZhiLi.lua` 文件的第57-58行:
```lua
-- 第57行:尝试创建已存在的特效
GUI:Effect_Create(...) -- ID已存在导致错误
-- 第58行:对nil对象设置缩放
GUI:setScale(target, ...) -- target为nil
```
**错误分析:**
1. **特效ID冲突**:`GUI:Effect_Create` 函数要求ID唯一,但你的代码重复使用了同一个ID创建特效
2. **空对象操作**:`GUI:setScale` 函数接收到的target参数为nil,没有进行空值检查
**修复方案:**
```lua
-- 在创建特效前检查是否已存在
local function safeCreateEffect(effectID, parent, x, y, path)
-- 先检查特效是否已存在
local existingEffect = GUI:getChildByName(parent, effectID)
if not GUI:Win_IsNull(existingEffect) then
-- 如果已存在,先移除再创建
GUI:removeFromParent(existingEffect)
end
-- 创建新特效
local effect = GUI:Effect_Create(effectID, parent, x, y, path)
return effect
end
-- 使用前检查对象是否有效
local function safeSetScale(widget, scaleX, scaleY)
if widget and not GUI:Win_IsNull(widget) then
GUI:setScale(widget, scaleX, scaleY)
else
SL:print("警告:尝试对空对象设置缩放")
end
end
-- 在你的onParentClick函数中替换原来的代码
function onParentClick()
-- 安全创建特效
local effect = safeCreateEffect("my_effect_id", parentNode, 100, 100, "res/effect/xxx.plist")
-- 安全设置缩放
safeSetScale(someWidget, 1.2, 1.2)
end
```
**预防建议:**
1. 使用唯一ID命名特效和控件
2. 所有GUI操作前都进行空值检查 `GUI:Win_IsNull()`
3. 重复创建前先移除旧对象
这个错误通常发生在界面快速打开/关闭时,对象没有正确清理导致的。下次写代码时要注意资源管理哦!