SL:release_print("打开装备回收界面")
local npc = {}
npc.equipCategory = {
[1] = {
title = "武器",
sub = {
[1] = { name = "刀剑类", list = { "木剑", "乌木剑", "铁剑", "青铜剑", "斩马剑", "短剑", "凝霜", "青铜斧", "七首", "井中月", "修罗", "屠龙", "裁决", "凌风",
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-06 18:41:45 |
👁️ 阅读: 15
根据浮生梦老师前端课程内容,你需要将每次点击复选框的信息存储到表中。以下是修改后的代码:
```lua
-- 在npc表中添加一个用于存储选中信息的表
npc.selectedItems = {}
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)
-- 创建按钮
for k, v in pairs(npc.equipCategory) do
local btn1 = "btn1_"..k
local yPos_1 = 404 - ((k-1)*35)
-- 创建主按钮
local btnFirst = GUI:Button_Create(npc.ui.ScrollView_first, btn1, 0, yPos_1, "res/01/010006.png")
GUI:Button_loadTexturePressed(btnFirst, "res/01/010005.png")
GUI:Button_setTitleText(btnFirst, v.title)
-- 主按钮点击事件
GUI:addOnClickEvent(btnFirst, function()
GUI:removeAllChildren(npc.ui.ScrollView_second)
for x, y in pairs(v.sub) do
local btn2 = "btn2_"..k.."_"..x
local yPos_2 = 404 - ((x-1)*35)
-- 创建二级按钮
local btnSecond = GUI:Button_Create(npc.ui.ScrollView_second, btn2, 0, yPos_2, "res/01/010006.png")
GUI:Button_loadTexturePressed(btnSecond, "res/01/010005.png")
GUI:Button_setTitleText(btnSecond, y.name)
-- 二级按钮点击事件
GUI:addOnClickEvent(btnSecond, function()
GUI:removeAllChildren(npc.ui.ScrollView_third)
local mainTitle = v.title
local subName = y.name
for m, n in pairs(y.list) do
local checkBox_state = 0
local imgBg = "Image_"..x.."_"..m
local checkBox = "checkBox_"..m
local text = "text"..m
local xPos_3 = 2 + 175 * ((m-1)%3)
local yPox_3 = 396 - 50 * math.floor((m-1)/3)
-- 回收底层图片
local img = GUI:Image_Create(npc.ui.ScrollView_third, imgBg, xPos_3, yPox_3, "res/public/1900000677.png")
GUI:setContentSize(img, 140, 40)
-- 复选框
local chcek_Box = GUI:CheckBox_Create(img, checkBox, 8, 6, "res/public/1900000550.png", "res/public/1900000551.png")
-- 复选框对应装备
GUI:Text_Create(img, text, 40, 8, 16, "#FFFFFF", n)
-- 复选框点击事件
GUI:addOnClickEvent(chcek_Box, function()
local isSelected = GUI:CheckBox_isSelected(chcek_Box)
if isSelected then
checkBox_state = 1 -- 选中
-- 添加到选中表
npc.selectedItems[n] = {
mainTitle = mainTitle,
subName = subName,
equipName = n,
isSelected = true,
checkBoxState = checkBox_state
}
else
checkBox_state = 0 -- 未选中
-- 从选中表中移除
npc.selectedItems[n] = nil
end
-- 更新复选框状态
GUI:CheckBox_setSelected(chcek_Box, isSelected)
-- 打印选中信息表
SL:print("==================================")
SL:print("当前选中装备列表:")
for equipName, data in pairs(npc.selectedItems) do
SL:print("装备: " .. equipName .. " - 状态: 已选中")
end
SL:print("==================================")
end)
end
end)
end
end)
end
end
```
**关键修改点:**
1. **添加存储表**:`npc.selectedItems = {}` 用于存储所有选中的装备信息
2. **复选框逻辑优化**:
- 选中时:将装备信息存入 `npc.selectedItems` 表
- 取消选中时:从表中移除对应装备
- 使用装备名称作为表的键,确保唯一性
3. **状态同步**:使用 `GUI:CheckBox_setSelected()` 确保复选框状态与实际选中状态一致
4. **实时反馈**:每次点击后打印当前所有选中的装备列表
**使用示例:**
```lua
-- 获取所有选中装备
for equipName, data in pairs(npc.selectedItems) do
SL:print("主分类: " .. data.mainTitle)
SL:print("二级分类: " .. data.subName)
SL:print("装备名: " .. data.equipName)
end
-- 检查特定装备是否选中
if npc.selectedItems["屠龙"] then
SL:print("屠龙已被选中")
end
```
这样每次点击复选框时,对应的装备信息就会自动添加到表中,取消选中时会从表中移除,方便后续处理回收逻辑。
← 返回问答库