function ZhongJiTuJian:updateUI()
local ui = self.ui
for i = 1 , 3 do
if i == self.select then
UILib:setVisible(ui["Im_"..i],true)
else
UILib:setVisible(ui["Im_"..i],false)
end
end
UIL
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-16 03:18:19 |
👁️ 阅读: 7
你的代码中`ui["Image_10"..i]`控件失效是因为作用域问题。在第47行,你创建了`"Image_10"..i`控件,但它是`Button_1`的子节点,却错误地尝试从`ui`表中获取。
**问题分析:**
```lua
-- 错误方式:创建在Button_1下,却从ui表中获取
GUI:Image_Create(Button_1, "Image_10"..i, -7, -3, "res/public/1900000678_1.png")
-- 这里应该使用Button_1来获取子节点
GUI:setContentSize(ui["Image_10"..i], 153, 64) -- 错误!ui表中没有这个控件
```
**解决方案:**
```lua
function ZhongJiTuJian:updateUI()
local ui = self.ui
for i = 1 , 3 do
if i == self.select then
GUI:setVisible(ui["Im_"..i], true) -- 注意:使用GUI:而不是UILib:
else
GUI:setVisible(ui["Im_"..i], false)
end
end
GUI:removeAllChildren(ui.Panel_1)
local xstar = 44
local ystar = 135
local xsep = 167
local ysep = 67
-- 存储创建的按钮,方便后续操作
self.buttonList = self.buttonList or {}
for i = 1, #_cfg[self.select].idx do
local row = math.floor((i - 1) / 2)
local col = (i - 1) % 2
local x = xstar + col * xsep
local y = ystar - row * ysep
-- Create Button_1
local Button_1 = GUI:Button_Create(ui.Panel_1, "Button_1"..i, x, y, "res/custom/ZhongJiTuJian/wpk.png")
GUI:Button_setTitleText(Button_1, "")
GUI:Button_setTitleColor(Button_1, "#ffffff")
GUI:Button_setTitleFontSize(Button_1, 16)
GUI:Button_titleEnableOutline(Button_1, "#000000", 1)
GUI:setAnchorPoint(Button_1, 0.00, 0.00)
GUI:setTouchEnabled(Button_1, true)
GUI:setTag(Button_1, i) -- 设置tag为i,方便识别
-- 存储按钮引用
self.buttonList[i] = Button_1
GUI:addOnClickEvent(Button_1, function()
self.selected = i
self:updateUIxz()
end)
-- Create Text_1
local Text_1 = GUI:Text_Create(Button_1, "Text_1"..i, 88, 44, 16, "#ffffff", SL:Get_ITEM_NAME(_cfg[self.select].idx[i]))
GUI:Text_enableOutline(Text_1, "#000000", 1)
GUI:setAnchorPoint(Text_1, 0.50, 0.50)
GUI:setTouchEnabled(Text_1, false)
-- Create ItemShow_1
local ItemShow_1 = GUI:ItemShow_Create(Button_1, "ItemShow_1"..i, 29, 28, {index = _cfg[self.select].idx[i], count = 1, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_1, 0.50, 0.50)
-- Create Text_2
local Text_2 = GUI:Text_Create(Button_1, "Text_2"..i, 85, 19, 16, "#ffffff", string.format("%d/1", 1))
GUI:Text_enableOutline(Text_2, "#000000", 1)
GUI:setAnchorPoint(Text_2, 0.50, 0.50)
GUI:setTouchEnabled(Text_2, false)
-- 正确创建Image_10作为Button_1的子节点
local imageBg = GUI:Image_Create(Button_1, "Image_10"..i, -7, -3, "res/public/1900000678_1.png")
GUI:setContentSize(imageBg, 153, 64)
GUI:setIgnoreContentAdaptWithSize(imageBg, false)
GUI:setAnchorPoint(imageBg, 0.00, 0.00)
GUI:setTouchEnabled(imageBg, false)
GUI:setVisible(imageBg, false)
end
self:updateUIxz()
end
function ZhongJiTuJian:updateUIxz()
local totalItems = #_cfg[self.select].idx
for i = 1, totalItems do
-- 从存储的按钮列表中获取按钮
local button = self.buttonList[i]
if button and not GUI:Win_IsNull(button) then
-- 从按钮中获取Image_10子节点
local imageBg = GUI:getChildByName(button, "Image_10"..i)
if imageBg and not GUI:Win_IsNull(imageBg) then
if i == self.selected then
GUI:setVisible(imageBg, true)
SL:print("显示选中框:"..i)
else
GUI:setVisible(imageBg, false)
end
else
SL:print("Image_10"..i.."控件不存在或已失效")
end
else
SL:print("按钮"..i.."不存在或已失效")
end
end
end
```
**关键修改点:**
1. 使用`GUI:getChildByName(button, "Image_10"..i)`从按钮中获取子节点
2. 存储按钮引用到`self.buttonList`表中
3. 使用`GUI:Win_IsNull()`检查控件有效性
4. 将`UILib:`改为`GUI:`(根据浮生梦老师前端课程内容)
这样就能正确访问到`Image_10`控件了。下次注意控件的作用域问题哦!
你的代码中`ui["Image_10"..i]`控件失效是因为作用域问题。在第47行,你创建了`"Image_10"..i`控件,但它是`Button_1`的子节点,却错误地尝试从`ui`表中获取。
**问题分析:**
```lua
-- 错误方式:创建在Button_1下,却从ui表中获取
GUI:Image_Create(Button_1, "Image_10"..i, -7, -3, "res/public/1900000678_1.png")
-- 这里应该使用Button_1来获取子节点
GUI:setContentSize(ui["Image_10"..i], 153, 64) -- 错误!ui表中没有这个控件
```
**解决方案:**
```lua
function ZhongJiTuJian:updateUI()
local ui = self.ui
for i = 1 , 3 do
if i == self.select then
GUI:setVisible(ui["Im_"..i], true) -- 注意:使用GUI:而不是UILib:
else
GUI:setVisible(ui["Im_"..i], false)
end
end
GUI:removeAllChildren(ui.Panel_1)
local xstar = 44
local ystar = 135
local xsep = 167
local ysep = 67
-- 存储创建的按钮,方便后续操作
self.buttonList = self.buttonList or {}
for i = 1, #_cfg[self.select].idx do
local row = math.floor((i - 1) / 2)
local col = (i - 1) % 2
local x = xstar + col * xsep
local y = ystar - row * ysep
-- Create Button_1
local Button_1 = GUI:Button_Create(ui.Panel_1, "Button_1"..i, x, y, "res/custom/ZhongJiTuJian/wpk.png")
GUI:Button_setTitleText(Button_1, "")
GUI:Button_setTitleColor(Button_1, "#ffffff")
GUI:Button_setTitleFontSize(Button_1, 16)
GUI:Button_titleEnableOutline(Button_1, "#000000", 1)
GUI:setAnchorPoint(Button_1, 0.00, 0.00)
GUI:setTouchEnabled(Button_1, true)
GUI:setTag(Button_1, i) -- 设置tag为i,方便识别
-- 存储按钮引用
self.buttonList[i] = Button_1
GUI:addOnClickEvent(Button_1, function()
self.selected = i
self:updateUIxz()
end)
-- Create Text_1
local Text_1 = GUI:Text_Create(Button_1, "Text_1"..i, 88, 44, 16, "#ffffff", SL:Get_ITEM_NAME(_cfg[self.select].idx[i]))
GUI:Text_enableOutline(Text_1, "#000000", 1)
GUI:setAnchorPoint(Text_1, 0.50, 0.50)
GUI:setTouchEnabled(Text_1, false)
-- Create ItemShow_1
local ItemShow_1 = GUI:ItemShow_Create(Button_1, "ItemShow_1"..i, 29, 28, {index = _cfg[self.select].idx[i], count = 1, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_1, 0.50, 0.50)
-- Create Text_2
local Text_2 = GUI:Text_Create(Button_1, "Text_2"..i, 85, 19, 16, "#ffffff", string.format("%d/1", 1))
GUI:Text_enableOutline(Text_2, "#000000", 1)
GUI:setAnchorPoint(Text_2, 0.50, 0.50)
GUI:setTouchEnabled(Text_2, false)
-- 正确创建Image_10作为Button_1的子节点
local imageBg = GUI:Image_Create(Button_1, "Image_10"..i, -7, -3, "res/public/1900000678_1.png")
GUI:setContentSize(imageBg, 153, 64)
GUI:setIgnoreContentAdaptWithSize(imageBg, false)
GUI:setAnchorPoint(imageBg, 0.00, 0.00)
GUI:setTouchEnabled(imageBg, false)
GUI:setVisible(imageBg, false)
end
self:updateUIxz()
end
function ZhongJiTuJian:updateUIxz()
local totalItems = #_cfg[self.select].idx
for i = 1, totalItems do
-- 从存储的按钮列表中获取按钮
local button = self.buttonList[i]
if button and not GUI:Win_IsNull(button) then
-- 从按钮中获取Image_10子节点
local imageBg = GUI:getChildByName(button, "Image_10"..i)
if imageBg and not GUI:Win_IsNull(imageBg) then
if i == self.selected then
GUI:setVisible(imageBg, true)
SL:print("显示选中框:"..i)
else
GUI:setVisible(imageBg, false)
end
else
SL:print("Image_10"..i.."控件不存在或已失效")
end
else
SL:print("按钮"..i.."不存在或已失效")
end
end
end
```
**关键修改点:**
1. 使用`GUI:getChildByName(button, "Image_10"..i)`从按钮中获取子节点
2. 存储按钮引用到`self.buttonList`表中
3. 使用`GUI:Win_IsNull()`检查控件有效性
4. 将`UILib:`改为`GUI:`(根据浮生梦老师前端课程内容)
这样就能正确访问到`Image_10`控件了。下次注意控件的作用域问题哦!
← 返回问答库