SL:release_print("打开装备回收界面")
local npc = {}
-- 装备分类总表:三大类 + 每类6小类
npc.equipCategory = {
[1] = {
title = "武器",
sub = {
[1] = { name = "刀剑类", list = { "木剑", "乌木剑", "铁剑", "青铜剑", "斩马剑", "短剑", "凝霜", "青铜斧", "七首", "井中月", "修
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-06 02:36:21 |
👁️ 阅读: 8
根据浮生梦老师前端课程内容,要实现按钮不能重复点击且点击其他按钮时恢复上一个按钮的状态,需要修改按钮点击事件的处理逻辑。主要问题是每次点击都重新设置禁用状态,但没有恢复其他按钮的可用状态。
以下是修改后的代码:
```lua
function npc:openWin()
-- 创造外部界面
local win_recycleGUI = GUI:Win_Create("win_recycleGUI", 0, 0, 0, 0)
GUI:LoadExport(win_recycleGUI, "recycleGUI")
npc.ui = GUI:ui_delegate(win_recycleGUI)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_recycleGUI)
end)
-- 存储当前选中的一级按钮和二级按钮
local currentSelectedBtn1 = nil
local currentSelectedBtn2 = nil
-- 创建一级按钮
for k, v in pairs(npc.equipCategory) do
local btn1 = "btn1_"..k
local yPos_1 = 404 - ((k-1)*35)
GUI:Button_Create(npc.ui.ScrollView_first, btn1, 0, yPos_1, "res/01/010006.png")
GUI:Button_loadTexturePressed(npc.ui[btn1], "res/01/010005.png")
GUI:Button_setTitleText(npc.ui[btn1], v.title)
-- 设置一级按钮点击事件
GUI:addOnClickEvent(npc.ui[btn1], function()
-- 恢复上一个选中的一级按钮
if currentSelectedBtn1 and currentSelectedBtn1 ~= btn1 then
GUI:Button_setBrightEx(npc.ui[currentSelectedBtn1], false) -- 启用按钮
GUI:Button_loadTextureDisabled(npc.ui[currentSelectedBtn1], nil) -- 清除禁用图片
end
-- 设置当前选中的一级按钮为禁用状态
GUI:Button_loadTextureDisabled(npc.ui[btn1], "res/01/010005.png")
GUI:Button_setBrightEx(npc.ui[btn1], true) -- 禁用当前按钮
currentSelectedBtn1 = btn1
-- 清空二级按钮区域
GUI:removeAllChildren(npc.ui.ScrollView_second)
currentSelectedBtn2 = nil -- 重置二级选中状态
-- 创建二级按钮
for x, y in pairs(v.sub) do
local btn2 = "btn2_"..k.."_"..x
local yPos_2 = 404 - ((x-1)*35)
GUI:Button_Create(npc.ui.ScrollView_second, btn2, 0, yPos_2, "res/01/010006.png")
GUI:Button_loadTexturePressed(npc.ui[btn2], "res/01/010005.png")
GUI:Button_setTitleText(npc.ui[btn2], y.name)
-- 设置二级按钮点击事件
GUI:addOnClickEvent(npc.ui[btn2], function()
-- 恢复上一个选中的二级按钮
if currentSelectedBtn2 and currentSelectedBtn2 ~= btn2 then
GUI:Button_setBrightEx(npc.ui[currentSelectedBtn2], false) -- 启用按钮
GUI:Button_loadTextureDisabled(npc.ui[currentSelectedBtn2], nil) -- 清除禁用图片
end
-- 设置当前选中的二级按钮为禁用状态
GUI:Button_loadTextureDisabled(npc.ui[btn2], "res/01/010005.png")
GUI:Button_setBrightEx(npc.ui[btn2], true) -- 禁用当前按钮
currentSelectedBtn2 = btn2
-- 清空三级区域并创建装备列表
GUI:removeAllChildren(npc.ui.ScrollView_third)
for m, n in pairs(y.list) do
local imgBg = "Image_"..x.."_"..m
local chehkBox = "chehkBox_"..m
local text = "text"..m
local xPos_3 = 2 + 175 * ((m-1)%3)
local yPox_3 = 396 - 50 * math.floor((m-1)/3)
GUI:Image_Create(npc.ui.ScrollView_third, imgBg, xPos_3, yPox_3, "res/public/1900000677.png")
GUI:setContentSize(npc.ui[imgBg], 140, 40)
GUI:CheckBox_Create(npc.ui[imgBg], chehkBox, 8, 6, "res/public/1900000550.png", "res/public/1900000551.png")
GUI:Text_Create(npc.ui[imgBg], text, 40, 8, 16, "#FFFFFF", n)
end
end)
end
end)
end
end
```
**主要修改点:**
1. **添加状态记录变量**:
- `currentSelectedBtn1`:记录当前选中的一级按钮
- `currentSelectedBtn2`:记录当前选中的二级按钮
2. **按钮状态管理**:
- 点击新按钮前,先恢复上一个选中按钮的可用状态
- 使用 `GUI:Button_setBrightEx(button, false)` 恢复按钮可用
- 使用 `GUI:Button_loadTextureDisabled(button, nil)` 清除禁用图片
3. **正确的禁用函数**:
- 使用 `GUI:Button_setBrightEx(button, true)` 禁用按钮
- 而不是之前错误的 `GUI:Button_setBright()`
**函数说明**:
- `GUI:Button_setBrightEx(widget, value)`:设置按钮是否禁用(true=禁用,false=启用)
- `GUI:Button_loadTextureDisabled(widget, filepath)`:设置按钮禁用时显示的图片,传nil可清除
这样修改后,按钮点击逻辑就正常了:点击一个按钮会禁用当前按钮,同时恢复上一个被点击按钮的可用状态,实现了单选效果。
← 返回问答库