function npc:reLoadWIn(page)
-- 清空之前残留的组件
for i = 1, 28 do
local oldLayout = GUI:getChildByName(npc.ui.bg, "panel" .. i .. "_" .. page)
if oldLayout then
SL:print("1523153153")
GUI:removeFromParent(oldL
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-14 01:52:40 |
👁️ 阅读: 1
我仔细看了你的代码,发现了一个关键问题。你清空组件时查找的是 `"panel" .. i .. "_" .. page`,但创建新组件时使用的是 `"panel" .. page .. "_" .. m`。
**问题分析:**
1. 清空时:`panel1_1`、`panel2_1`、`panel3_1`...`panel28_1`
2. 创建时:`panel1_1`、`panel1_2`、`panel1_3`...
**ID命名规则不一致!** 这导致旧的组件没有被正确移除。
**修正后的代码:**
```lua
function npc:reLoadWIn(page)
-- 清空之前残留的组件
for i = 1, 28 do
-- 修正:使用与创建时一致的ID格式
local oldLayout = GUI:getChildByName(npc.ui.bg, "panel" .. page .. "_" .. i)
if oldLayout then
SL:print("正在移除旧组件: panel" .. page .. "_" .. i)
GUI:removeFromParent(oldLayout)
end
end
local group = npc.equip[page]
if not group then return end
-- 新建页面
for m, n in ipairs(group) do
local layOut = "panel" .. page .. "_" .. m
-- 创建基础容器方便文本创建
local xPanel = 52
local yPanel = 406 - (m - 1) * 35
local layout = GUI:Layout_Create(npc.ui.bg, layOut, xPanel, yPanel, 730, 30, false)
-- 地图
local text_map = "map" .. page .. "_" .. m
GUI:Text_Create(layout, text_map, 65, 0, 18, "#00ff00", "暂未爆出")
-- 装备
local text_item = "item" .. page .. "_" .. m
GUI:Text_Create(layout, text_item, 256, 0, 18, "#00ffe8", n.name)
-- 奖励
local text_reward = "reward" .. page .. "_" .. m
GUI:Text_Create(layout, text_reward, 447, 0, 18, "#ffff00", n.reward)
-- 状态
local text_status = "status" .. page .. "_" .. m
GUI:Text_Create(layout, text_status, 638, 0, 18, "#00ff00", "未获取")
end
end
```
**关键修改:**
- 第5行:`"panel" .. i .. "_" .. page` → `"panel" .. page .. "_" .. i`
- 这样清空和创建的ID格式就保持一致了
**调试建议:**
你可以在移除前打印一下ID,看看是否匹配:
```lua
SL:print("查找组件: panel" .. page .. "_" .. i)
```
这种命名不一致的问题很常见,下次写代码时要特别注意ID的命名规则要统一!如果还有问题,可以随时问我。
我仔细看了你的代码,发现了一个关键问题。你清空组件时查找的是 `"panel" .. i .. "_" .. page`,但创建新组件时使用的是 `"panel" .. page .. "_" .. m`。
**问题分析:**
1. 清空时:`panel1_1`、`panel2_1`、`panel3_1`...`panel28_1`
2. 创建时:`panel1_1`、`panel1_2`、`panel1_3`...
**ID命名规则不一致!** 这导致旧的组件没有被正确移除。
**修正后的代码:**
```lua
function npc:reLoadWIn(page)
-- 清空之前残留的组件
for i = 1, 28 do
-- 修正:使用与创建时一致的ID格式
local oldLayout = GUI:getChildByName(npc.ui.bg, "panel" .. page .. "_" .. i)
if oldLayout then
SL:print("正在移除旧组件: panel" .. page .. "_" .. i)
GUI:removeFromParent(oldLayout)
end
end
local group = npc.equip[page]
if not group then return end
-- 新建页面
for m, n in ipairs(group) do
local layOut = "panel" .. page .. "_" .. m
-- 创建基础容器方便文本创建
local xPanel = 52
local yPanel = 406 - (m - 1) * 35
local layout = GUI:Layout_Create(npc.ui.bg, layOut, xPanel, yPanel, 730, 30, false)
-- 地图
local text_map = "map" .. page .. "_" .. m
GUI:Text_Create(layout, text_map, 65, 0, 18, "#00ff00", "暂未爆出")
-- 装备
local text_item = "item" .. page .. "_" .. m
GUI:Text_Create(layout, text_item, 256, 0, 18, "#00ffe8", n.name)
-- 奖励
local text_reward = "reward" .. page .. "_" .. m
GUI:Text_Create(layout, text_reward, 447, 0, 18, "#ffff00", n.reward)
-- 状态
local text_status = "status" .. page .. "_" .. m
GUI:Text_Create(layout, text_status, 638, 0, 18, "#00ff00", "未获取")
end
end
```
**关键修改:**
- 第5行:`"panel" .. i .. "_" .. page` → `"panel" .. page .. "_" .. i`
- 这样清空和创建的ID格式就保持一致了
**调试建议:**
你可以在移除前打印一下ID,看看是否匹配:
```lua
SL:print("查找组件: panel" .. page .. "_" .. i)
```
这种命名不一致的问题很常见,下次写代码时要特别注意ID的命名规则要统一!如果还有问题,可以随时问我。
← 返回问答库