[LUA-print] LUA ERROR: ASSERT FAILED ON LUA EXECUTE: child already added. It can't be added again 这个是什么意思
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-03 23:15:53 |
👁️ 阅读: 14
这个错误的意思是:**控件已经添加到了父节点,不能重复添加**。
具体来说,你在尝试将一个控件(比如按钮、文本等)添加到父节点时,这个控件已经被添加过了。在996引擎中,一个控件只能有一个父节点,不能重复添加到多个父节点。
**常见问题场景:**
```lua
-- 错误示例1:重复添加同一个控件
local parent1 = GUI:Win_Create("parent1", 0, 0, 0, 0, false, false, true, false, false, false, 1)
local parent2 = GUI:Win_Create("parent2", 0, 0, 0, 0, false, false, true, false, false, false, 1)
local child = GUI:Text_Create(parent1, "my_text", 100, 100, 16, "#ffffff", "测试")
-- 这里会报错,因为child已经属于parent1了
GUI:addChild(parent2, child) -- 错误:child already added
```
```lua
-- 错误示例2:动态创建时忘记检查是否已存在
local function createUI()
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 如果多次调用这个函数,会重复创建同名的控件
local btn = GUI:Button_Create(parent, "btn_test", 100, 100, "res/public/1900000612.png")
-- 第二次调用就会报错
end
-- 多次调用
createUI()
createUI() -- 这里会报错
```
**解决方法:**
1. **检查控件是否已存在**:
```lua
local function createButton(parent, btnName)
-- 先检查是否已经存在
local existingBtn = GUI:getChildByName(parent, btnName)
if not GUI:Win_IsNull(existingBtn) then
-- 如果已存在,先移除
GUI:removeFromParent(existingBtn)
end
-- 重新创建
local btn = GUI:Button_Create(parent, btnName, 100, 100, "res/public/1900000612.png")
return btn
end
```
2. **确保控件只添加一次**:
```lua
local isUIInitialized = false
function initUI()
if isUIInitialized then
return -- 如果已经初始化过,直接返回
end
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建子控件
local btn = GUI:Button_Create(parent, "btn_test", 100, 100, "res/public/1900000612.png")
isUIInitialized = true
end
```
3. **使用正确的添加方式**:
```lua
-- 正确方式:创建时就指定父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
local childWidget = GUI:Widget_Create(parent, "my_widget", 100, 200, 300, 400)
-- 正确方式:使用ListView添加
local listView = GUI:ListView_Create(parent, "list", 0, 0, 200, 300)
local item = GUI:Layout_Create(nil, "item", 0, 0, 100, 50, false)
GUI:ListView_insertCustomItem(listView, item, 1) -- 插入到指定位置
```
**检查你的代码**:
看看是不是在某个地方:
- 多次调用同一个创建函数
- 尝试将同一个控件添加到不同的父节点
- 在定时器或循环中重复创建控件而没有清理
这种错误通常发生在UI动态更新的场景中,记得每次创建前先检查并清理已存在的控件。
← 返回问答库