for k, v in ipairs(PlayerEquip.destiny_config) do
local btn = GUI:getChildByName(PlayerEquip._ui.destiny_list, "btn_"..k)
local imageName = "destiny_img_"..k
if Lv < v.level or rLv < v.rlv then
GUI:Button_setBrigh
根据浮生梦老师前端课程内容,要实现点击按钮时切换图片显示/关闭功能,需要修改代码逻辑。以下是优化后的实现方案:
```lua
for k, v in ipairs(PlayerEquip.destiny_config) do
local btn = GUI:getChildByName(PlayerEquip._ui.destiny_list, "btn_"..k)
local imageName = "destiny_img_"..k
if Lv < v.level or rLv < v.rlv then
GUI:Button_setBright(btn, false)
end
if Lv >= v.level and rLv >= v.rlv then
GUI:Button_setBright(btn, true)
GUI:addOnClickEvent(btn, function()
-- 检查当前是否已打开对应的图片
local existingPic = GUI:getChildByName(PlayerEquip._ui.destiny_bg, imageName)
if existingPic and not GUI:Win_IsNull(existingPic) then
-- 如果图片已存在,则关闭它
GUI:removeFromParent(existingPic)
PlayerEquip.currentPic = nil
else
-- 如果图片不存在,则创建新图片
if PlayerEquip.currentPic then
GUI:removeFromParent(PlayerEquip.currentPic)
PlayerEquip.currentPic = nil
end
local newPic = GUI:Image_Create(PlayerEquip._ui.destiny_bg, imageName, -500, 350, "res/public_win32/bg_npc_01.png")
PlayerEquip.currentPic = newPic
local str = "text_"..k
GUI:Text_Create(newPic, "text", 50, 50, 18, "#fff000", str)
SL:Require("qianduan/button/destiny.lua", true, destinyHandler(newPic, k))
end
end)
end
end
```
**主要修改点:**
1. **使用唯一ID标识图片**:为每个按钮创建的图片设置唯一的ID(`imageName = "destiny_img_"..k`)
2. **检查图片是否存在**:通过`GUI:getChildByName()`查找是否已存在相同ID的图片
3. **切换逻辑**:
- 如果图片已存在 → 移除图片(关闭界面)
- 如果图片不存在 → 创建新图片(打开界面)
4. **移除了不必要的`imgStatus`变量**,直接通过查找节点判断
5. **修复了图片创建时的ID使用**:使用`imageName`作为图片的唯一标识
这样修改后,点击按钮会切换图片的显示状态:第一次点击显示图片,再次点击隐藏图片,实现开关效果。
注意:请确保`PlayerEquip._ui.destiny_bg`是有效的父节点,并且`res/public_win32/bg_npc_01.png`图片路径正确可用。