SL:print("打开洗练界面")
local refined = {}
EquipPos = {[0] = "衣服",[1] = "武器",[2] = "勋章",[3] = "头盔",[4] = "项链",[5] = "手镯(右)" ,
[6] = "手镯(左)",[7] = "戒指(右)",[8] = "戒指(左)",[10] = "腰带",[11] = "靴子"}
refined.currentAttributes = {
{type = 0, name = "无属性",
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-20 23:52:59 |
👁️ 阅读: 5
你的代码中获取复选框状态的部分有问题。`refined.lock` 和 `lockState_i` 的打印没有显示,是因为你在 `openWin` 函数中获取复选框状态时,**复选框还没有被用户点击**,所以获取到的初始状态可能不是你预期的。
根据浮生梦老师前端课程内容,复选框的初始状态需要正确获取,并且应该在用户点击时更新状态。以下是修改后的代码:
```lua
function refined:openWin()
-- 创造外部界面
local win_refined = GUI:Win_Create("win_refined", 0, 0, 0, 0)
GUI:LoadExport(win_refined, "refined")
refined.ui = GUI:ui_delegate(win_refined)
GUI:addOnClickEvent(refined.ui.esc, function()
GUI:Win_Close(win_refined)
end)
SL:SendLuaNetMsg(2013, 13, 0, 0, "装备洗练")
refined.currentEquipPos = 0 -- 默认选中衣服位置0
for x, y in pairs(EquipPos) do
local buttonName = "but_"..x
GUI:addOnClickEvent(refined.ui[buttonName], function()
refined.currentEquipPos = x
refined:createHighLight(refined.ui[buttonName], x)
SL:SendLuaNetMsg(2013, 13, 0, x, "装备洗练") -- 放入装备
end)
end
-- 首次进入时,在第一个按钮上创建高亮
if refined.ui["but_0"] then
refined:createHighLight(refined.ui["but_0"], 0)
end
-- 初始化复选框状态
refined.lock = {0, 0, 0} -- 复选框状态
-- 获取初始复选框状态并绑定点击事件
for i = 1, 3 do
local lockState = "CheckBox_"..i
if refined.ui[lockState] then
-- 获取初始状态
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
refined.lock[i] = lockState_i and 1 or 0
-- 绑定点击事件来更新状态
GUI:addOnClickEvent(refined.ui[lockState], function()
local currentState = GUI:CheckBox_isSelected(refined.ui[lockState])
refined.lock[i] = currentState and 1 or 0
SL:dump(refined.lock, "复选框状态更新")
SL:print("CheckBox_"..i.." 状态: " .. tostring(currentState))
end)
end
end
-- 打印初始状态
SL:dump(refined.lock, "初始复选框状态")
SL:print("===== 界面打开完成 =====")
end
```
主要修改点:
1. 在 `openWin` 函数中正确获取复选框的初始状态
2. 为每个复选框绑定点击事件,当用户点击时更新 `refined.lock` 数组
3. 在点击事件中添加打印语句,这样你就能看到状态变化了
这样修改后,当你打开界面时,会打印初始的复选框状态;当你点击复选框时,会打印更新后的状态。
← 返回问答库