SL:release_print("打开装备回收界面")
local npc = {}
npc.equipCategory = {
[1] = {
title = "武器",
sub = {
[1] = { name = "刀剑类", list = { "木剑", "乌木剑", "铁剑", "青铜剑", "斩马剑", "短剑", "凝霜", "青铜斧", "七首", "井中月",
"修罗", "屠龙"
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-08 00:01:45 |
👁️ 阅读: 11
你的问题在于变量作用域和赋值时机。在 `npc:openWin()` 函数中,`seclectPage_allEqName = y.list` 这行代码是在二级按钮的点击事件回调函数内部赋值的,而你在事件外部尝试打印它,此时 `y` 变量是未定义的(`nil`),所以 `y.list` 也是 `nil`。
**根本原因:**
`seclectPage_allEqName` 的赋值操作被包裹在 `GUI:addOnClickEvent(btnSecond, function() ... end)` 这个匿名函数里。这个函数只会在玩家点击某个二级按钮时才会执行。当你直接调用 `SL:release_print(...)` 时,点击事件尚未触发,所以 `seclectPage_allEqName` 没有被赋予 `y.list` 的值,它可能是一个全局的 `nil` 或者一个旧的、不相关的值(比如来自其他地方的“项链类”字符串)。
**修复方法:**
确保对 `seclectPage_allEqName` 的访问和操作都在正确的回调函数作用域内,或者通过其他方式传递数据。例如,在你想要打印的地方(比如某个测试按钮的点击事件里),从 `npc` 表或某个局部变量中获取当前选中的列表。
这里是一个修改思路,将当前选中的页面信息存储在 `npc` 表中,方便其他函数访问:
```lua
function npc:openWin()
-- ... 前面的创建代码 ...
-- 保存当前显示的列表,方便一键全选...
npc.currentPageInfo = {} -- 用一个表来存储当前页面信息
-- 创建按钮
for k, v in ipairs(npc.equipCategory) do
-- ... 创建一级按钮 ...
GUI:addOnClickEvent(btnFirst, function()
-- ... 清除二级列表 ...
for x, y in ipairs(v.sub) do
-- ... 创建二级按钮 ...
GUI:addOnClickEvent(btnSecond, function()
-- ... 清除三级列表 ...
-- 保存当前列表到 npc.currentPageInfo
npc.currentPageInfo.mainIndex = k
npc.currentPageInfo.mainTitle = v.title
npc.currentPageInfo.subIndex = x
npc.currentPageInfo.subName = y.name
npc.currentPageInfo.equipList = y.list -- 这里保存了装备名列表
-- 现在可以打印,或者在其他地方通过 npc.currentPageInfo 访问
SL:print("当前页面信息:")
SL:print("一级菜单:", npc.currentPageInfo.mainTitle)
SL:print("二级菜单:", npc.currentPageInfo.subName)
SL:print("装备列表:", table.concat(npc.currentPageInfo.equipList, ", "))
-- ... 遍历创建回收界面的代码 ...
end)
end
end)
end
-- 例如,在“一键全选”按钮中,你可以这样访问:
GUI:addOnClickEvent(npc.ui.Button_chooseAll, function()
if npc.currentPageInfo and npc.currentPageInfo.equipList then
SL:print("准备全选列表:", table.concat(npc.currentPageInfo.equipList, ", "))
-- 这里实现全选逻辑,遍历 npc.currentPageInfo.equipList
else
SL:print("请先选择一个装备分类")
end
end)
end
```
这样,`npc.currentPageInfo.equipList` 就会在你点击二级按钮时被正确赋值为当前分类的装备名列表(例如 `{"金项链", "黄色水晶项链", ...}`),而不是一个字符串“项链类”。你在其他地方需要时,就可以通过这个表来获取数据。
← 返回问答库