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:08:25 |
👁️ 阅读: 9
根据浮生梦老师前端课程内容,你的问题在于复选框状态判断逻辑写反了。在`GUI:CheckBox_isSelected()`函数中,返回`true`表示复选框被选中(打钩状态),返回`false`表示未选中(未打钩)。
你的代码中,当`lockState_i == true`(即复选框打钩)时,你设置`refined.lock[i] = 1`,这表示“锁定”。但根据你的描述,后端期望“锁定为1,未锁定为0”。所以当用户点击复选框打钩(表示要锁定这条属性)时,应该发送`lock[i] = 1`给后端。
然而,你观察到的现象是“点过复选框后,选定的复选框为0,未选定的复选框为1”。这说明你的实际逻辑与预期相反。问题可能出在:
1. **初始状态**:你代码中没有设置复选框的初始选中状态,所以它们可能默认都是未选中(`false`)。
2. **点击逻辑**:当用户第一次点击复选框时,`GUI:CheckBox_isSelected()`会返回`true`(因为从未选中变为选中),然后你设置`lock[i] = 1`,这符合“锁定为1”。
3. **但你说结果是反的**:这可能是你的UI布局中,复选框的“打钩”图片与实际逻辑不符,或者后端对“锁定”的定义与前端不同。
**建议修改**:
先明确需求:用户打钩复选框 → 表示锁定该属性 → 发送`lock[i] = 1`给后端。
检查你的代码,确保`GUI:CheckBox_isSelected()`的返回值处理正确。如果后端期望“锁定为1,未锁定为0”,那么你的代码逻辑应该是对的。问题可能在于:
- 后端返回的数据中,`lock`数组的初始值是什么?
- 是否在`openWin()`中初始化复选框状态为后端传来的值?
你需要在`refreshWin`中根据后端数据设置复选框状态:
```lua
if refined.eqInfo.lockStates then
for i = 1, 3 do
local lockState = "CheckBox_"..i
-- 假设后端传来lockStates[i] = 1表示锁定
GUI:CheckBox_setSelected(refined.ui[lockState], refined.eqInfo.lockStates[i] == 1)
end
end
```
这样就能保证前后端状态一致。如果还有问题,检查网络消息`p3`和`msgData`中是否包含锁定的状态信息。
← 返回问答库