SL:print("打开洗练界面")
local refined = {}
EquipPos = {[0] = "衣服",[1] = "武器",[2] = "勋章",[3] = "头盔",[4] = "项链",[5] = "手镯(右)" ,
[6] = "手镯(左)",[7] = "戒指(右)",[8] = "戒指(左)",[10] = "腰带",[11] = "靴子"}
refined.currentAttributes = {
{type = 0, name = "无属性",
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-20 13:38:13 |
👁️ 阅读: 14
你提供的代码中,`highBright`图片创建失败的主要原因是**创建图片时,其父节点`refined.ui[buttonName]`可能为`nil`或未正确创建**。
根据浮生梦老师前端课程内容,问题出在`refined:refreshWin`函数里。当`refined.eqInfo[12].hasEquip == false`时,你尝试用`refined.ui[buttonName]`作为父节点创建图片,但此时`refined.ui[buttonName]`可能还没有被正确初始化或不存在。
**解决方案:**
1. **先确保父节点存在**:在创建子控件前,必须确认父节点已创建且不为空。
2. **使用正确的创建方式**:参考知识库中的创建模式。
修改后的代码片段如下:
```lua
if refined.eqInfo[12] then
local buttonName = "but_"..p3
local highBright_Img = "highBright"..p3
-- 先检查父节点是否存在且有效
if refined.ui[buttonName] and not GUI:Win_IsNull(refined.ui[buttonName]) then
if refined.eqInfo[12].hasEquip == false then
-- 正确创建高亮图片
local highBright = GUI:Image_Create(refined.ui[buttonName], highBright_Img, 0, 0, "res/public/1900000582.png")
GUI:setLocalZOrder(highBright, 1) -- 注意这里直接使用highBright变量
GUI:setContentSize(highBright, 60, 60) -- 根据需求设置大小
GUI:setAnchorPoint(highBright, 0.5, 0.5) -- 设置锚点居中
end
else
SL:print("警告:按钮节点 " .. buttonName .. " 不存在或为空")
end
if refined.ui.ItemShow_1 then
GUI:ItemShow_updateItem(refined.ui.ItemShow_1, refined.eqInfo[12].idx or 0)
end
end
```
**关键修改点:**
1. 增加了`GUI:Win_IsNull()`检查,确保父节点有效
2. 修正了`setLocalZOrder`的参数,应该传入新创建的图片对象
3. 添加了必要的`setContentSize`和`setAnchorPoint`设置
4. 增加了错误提示,便于调试
**调试建议:**
在创建前添加调试信息:
```lua
SL:print("按钮名称:" .. buttonName)
SL:print("按钮对象是否存在:" .. tostring(refined.ui[buttonName] ~= nil))
if refined.ui[buttonName] then
SL:print("按钮是否为空对象:" .. tostring(GUI:Win_IsNull(refined.ui[buttonName])))
end
```
这样就能准确找到图片创建失败的原因了。下次遇到类似问题,记得先检查父节点的状态!
← 返回问答库