从错误信息来看,问题出在第41行调用 `GUI:Timeline_MoveTo(map, {x = 0, y}, 0.5, function() end)` 时,`map` 参数是 `nil` 值。
主要问题在于 `GUI:getChildByName(npc.ui.btn_1main, "map1_"..i)` 没有正确获取到子节点。根据浮生梦老师前端课程内容,`GUI:getChildByName` 需要从正确的父节点查找,而 `npc.ui.btn_1main` 可能不是这些 `map1_X` 节点的直接父节点。
建议修改为:
```lua
function npc:openWin()
-- 创造外部界面
local win_dailyAct = GUI:Win_Create("win_dailyAct", 0, 0, 0, 0)
local btn1_status = "close"
local btn2_status = "close"
GUI:LoadExport(win_dailyAct, "dailyAct")
npc.ui = GUI:ui_delegate(win_dailyAct)
-- 先检查节点是否存在
for i = 1, 3 do
local map = GUI:getChildByName(win_dailyAct, "map1_"..i)
if GUI:Win_IsNull(map) then
SL:print("警告:节点 map1_"..i.." 不存在!")
else
SL:print("找到节点 map1_"..i)
end
end
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_dailyAct)
end)
GUI:addOnClickEvent(npc.ui.btn_1main, function()
if btn1_status == "close" then
btn1_status = "expand"
for i = 1, 3 do
-- 尝试从主界面查找,而不是从按钮查找
local map = GUI:getChildByName(win_dailyAct, "map1_"..i)
if not GUI:Win_IsNull(map) then
local y = 410 - i*33
GUI:Timeline_MoveTo(map, {x = 0, y = y}, 0.5, function() end)
end
end
else
btn1_status = "close"
for i = 1, 3 do
local map = GUI:getChildByName(win_dailyAct, "map1_"..i)
if not GUI:Win_IsNull(map) then
GUI:Timeline_MoveTo(map, {x = 0, y = 410}, 0.5, function() end)
end
end
end
end)
end
```
**关键修改点:**
1. 使用 `win_dailyAct` 作为父节点查找 `map1_X`,而不是 `npc.ui.btn_1main`
2. 添加了节点存在性检查 `GUI:Win_IsNull(map)`
3. 修正了 `{x = 0, y}` 为 `{x = 0, y = y}`(y需要赋值)
如果还是找不到节点,建议检查一下 `dailyAct.json` 布局文件中这些节点的实际名称和层级关系。下次写代码时要注意先验证节点是否存在,避免空值错误!