GUI:ui_delegate(parent) 这个命令怎么用? 我想打印出所有子节点
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-01 18:54:29 |
👁️ 阅读: 0
`GUI:ui_delegate(parent)` 这个函数的作用是自动获取界面中所有子控件,并返回一个包含这些控件的表(通常命名为 `ui`)。这样你就不用一个个用 `GUI:getChildByName` 去手动获取了。
**基本用法:**
```lua
-- 1. 先创建父窗口(根据浮生梦老师前端课程内容,这是标准流程)
local parent = GUI:Win_Create("MyWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 2. 加载UI文件(假设你的UI文件路径是 "ui/myui.json")
GUI:LoadExport(parent, "ui/myui.json")
-- 3. 使用ui_delegate获取所有子控件
local ui = GUI:ui_delegate(parent)
-- 现在ui表里就包含了所有控件,比如:
-- ui.Button_1, ui.Text_1, ui.Image_1 等等
```
**打印所有子节点的示例:**
```lua
local parent = GUI:Win_Create("TestWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:LoadExport(parent, "ui/test.json")
local ui = GUI:ui_delegate(parent)
-- 遍历ui表打印所有控件
for name, widget in pairs(ui) do
if not GUI:Win_IsNull(widget) then
local pos = GUI:getPosition(widget)
SL:Print("控件名:", name, "类型:", type(widget), "坐标: x=", pos.x, " y=", pos.y)
end
end
```
**重要说明:**
1. 必须在 `GUI:LoadExport()` 之后调用 `GUI:ui_delegate()`,否则获取不到控件
2. 返回的 `ui` 表里的控件名就是你在UI编辑器中设置的节点名称
3. 如果控件不存在,对应的值会是 `nil`,所以最好用 `GUI:Win_IsNull()` 判断一下
**实际应用案例(来自课程代码):**
```lua
-- 这是课程中的标准写法
self._parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, objcfg.HIDE_MAIN, false, objcfg.VOICE, objcfg.PC_ESC)
GUI:LoadExport(self._parent, objcfg.UI_PATH)
self.ui = GUI:ui_delegate(self._parent, objcfg) -- 获取所有控件
-- 之后就可以直接使用 self.ui.控件名 了
GUI:setVisible(self.ui.img_bg, true)
GUI:Button_setTitleText(self.ui.Button_1, "开始游戏")
```
如果你在UI编辑器里有个按钮叫 `btn_start`,那么代码中就可以用 `self.ui.btn_start` 来操作它。这样比一个个 `getChildByName` 方便多了!
← 返回问答库