SL:print("打开洗练界面")
local refined = {}
EquipPos = {[0] = "衣服",[1] = "武器",[2] = "勋章",[3] = "头盔",[4] = "项链",[5] = "手镯(右)" ,
[6] = "手镯(左)",[7] = "戒指(右)",[8] = "戒指(左)",[10] = "腰带",[11] = "靴子"}
refined.currentAttributes = {
{type = 0, name = "无属性",
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-21 10:04:13 |
👁️ 阅读: 16
你的代码逻辑有问题。根据浮生梦老师前端课程内容,`GUI:CheckBox_isSelected(widget)`函数返回的是复选框的选中状态,而你的逻辑处理反了。
```lua
-- 问题出在这里:
GUI:addOnClickEvent(refined.ui[lockState], function()
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
if lockState_i == true then
refined.lock[i] = 1 -- 这里错了!
else
refined.lock[i] = 0 -- 这里也错了!
end
local lockJson = SL:JsonEncode(refined.lock)
SL:SendLuaNetMsg(2013, 13, 2, x, lockJson)
end)
```
**正确逻辑应该是:**
```lua
GUI:addOnClickEvent(refined.ui[lockState], function()
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
-- 选中状态为true时,表示锁定该属性,应该为1
-- 未选中状态为false时,表示不锁定,应该为0
if lockState_i == true then
refined.lock[i] = 1 -- 选中状态,锁定属性
else
refined.lock[i] = 0 -- 未选中状态,不锁定属性
end
local lockJson = SL:JsonEncode(refined.lock)
SL:SendLuaNetMsg(2013, 13, 2, x, lockJson)
end)
```
**但你的注释说"逻辑与实际相反",说明后端期望的是:**
- 打钩(选中)为 0
- 未打钩(未选中)为 1
**所以应该这样写:**
```lua
GUI:addOnClickEvent(refined.ui[lockState], function()
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
-- 根据注释,后端期望:打钩为0,未打钩为1
if lockState_i == true then
refined.lock[i] = 0 -- 打钩(选中)为0
else
refined.lock[i] = 1 -- 未打钩(未选中)为1
end
local lockJson = SL:JsonEncode(refined.lock)
SL:SendLuaNetMsg(2013, 13, 2, x, lockJson)
end)
```
**问题分析:**
1. 初始状态时,复选框都是未选中状态(false)
2. 根据你的注释,后端期望未选中为1
3. 但点击后,你按照常规逻辑处理,导致数据反了
**解决方案:** 按照注释中的逻辑来写代码,选中为0,未选中为1。
← 返回问答库