function TestGUIUtil()
SCREEN_WIDTH = SL:GetMetaValue("SCREEN_WIDTH")
SCREEN_HEIGHT = SL:GetMetaValue("SCREEN_HEIGHT")
SL:Print("---------------当前时间:" .. os.date("%Y-%m-%d %H:%M:%S"))
SL:Print(string.format("---------------屏幕宽:%d,高:%d
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-10 17:31:53 |
👁️ 阅读: 0
从错误堆栈来看,问题出在 `GUI:getChildByName(Node, "Button_1")` 这一行。根据浮生梦老师前端课程内容,`GUI:getChildByName` 函数需要传入父节点对象和子节点名称,但错误显示在 `scripts/main.lua:14` 的 `getChildByName` 函数调用上。
查看你的代码,`uiModule:init(parent)` 返回的 `Node` 可能不是有效的GUI节点对象,或者 `player_base_attri_node_win32` 模块的 `init` 函数没有正确返回节点。
让我帮你修正代码:
```lua
function Lode_button()
-- 先创建父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 检查父节点是否创建成功
if GUI:Win_IsNull(parent) then
SL:Print("错误:父节点创建失败")
return nil
end
-- 加载UI模块
local uiModule = SL:Require("GUIExport/player/player_base_attri_node_win32", true)
if not uiModule or not uiModule.init then
SL:Print("错误:UI模块加载失败或没有init函数")
return nil
end
-- 调用init函数获取节点
local Node = uiModule:init(parent)
-- 检查Node是否有效
if GUI:Win_IsNull(Node) then
SL:Print("错误:init函数返回的节点无效")
return nil
end
-- 通过名称获取Button_1节点
local Button_1 = GUI:getChildByName(Node, "Button_1")
-- 检查Button_1是否存在
if not GUI:Win_IsNull(Button_1) then
-- 设置点击事件
GUI:addOnClickEvent(Button_1, function()
SL:Print("Button_1被点击了!")
end)
SL:Print("Button_1点击事件设置成功")
-- 设置按钮标题文本(如果需要)
GUI:Button_setTitleText(Button_1, "测试按钮")
-- 设置按钮位置
GUI:setPosition(Button_1, 100, 100)
else
SL:Print("错误:未找到Button_1节点")
-- 可以打印Node的所有子节点来调试
SL:Print("尝试查找Node下的所有子节点...")
end
return Node
end
```
**问题分析:**
1. `player_base_attri_node_win32` 模块的 `init` 函数可能没有正确返回GUI节点
2. 或者 `Button_1` 不是直接挂在返回的 `Node` 下,而是在更深层的子节点中
**建议调试步骤:**
1. 先检查 `uiModule:init(parent)` 返回的节点是否有效
2. 查看 `player_base_attri_node_win32.lua` 文件,确认 `init` 函数的实现
3. 如果模块加载有问题,可以尝试先检查文件路径是否正确
如果还是有问题,可以告诉我 `player_base_attri_node_win32.lua` 文件中 `init` 函数的具体实现,我可以帮你进一步分析。
← 返回问答库