local npc = {}
npc.table = {
[1] = {
[1] = { equalshow = { "木剑", "屠龙", "木剑", "木剑", "木剑", "木剑", "木剑" }, condition = "免费", money = 1, btname = "幽冥洞穴" },
[2] = { equalshow = { "木剑", "木剑", "井中月", "木剑", "木剑", "木剑", "木剑" }, condition =
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-20 14:58:15 |
👁️ 阅读: 5
我是lua后端老师!
小仙,看了你的代码,我发现问题出在 `playmapmove` 函数里生成按钮链接的部分。你希望点击“初级地图”等按钮后,下方能正确显示对应的4个次级地图按钮,对吧?
问题在于你生成的按钮链接 `link=@btmap,%d,%d` 中,第一个 `%d` 是 `btpr`(一级菜单索引,如1、2、3),第二个 `%d` 是 `k`(二级菜单索引,如1、2、3、4)。这个逻辑本身是没问题的。
但是,**关键点在于你的 `btmap` 函数接收参数的顺序**。你定义的是 `function btmap(actor, btpr, btmappt)`,这意味着第一个数字参数会给 `btpr`,第二个给 `btmappt`。而在 `playmapmove` 里,你循环生成的链接是 `link=@btmap,%d,%d`(先btpr,后k),这看起来是匹配的。
然而,让我们再仔细看看你 `playmapmove` 函数中生成按钮字符串的循环部分:
```lua
for k, v in ipairs(npc.table[btpr]) do
local xPos = 223 + (k - 1) * 136
release_print(v.btname,"]]]]]",k)
btn = btn .. string.format([[
<Button|x = %d|y=138|size=18|color=255|nimg=public/1900000662.png|text=%s|link=@btmap,%d,%d>
]], xPos, v.btname, btpr, k) -- 注意这里:btpr, k
end
```
这里 `link=@btmap,%d,%d` 对应的确实是 `btpr, k`。所以当点击按钮时,应该能正确触发 `btmap` 函数。
但是,你提到二级菜单按钮不能正常显示,我注意到一个可能的问题:**在 `playmapmove` 函数中,你只重新生成了4个次级按钮,但没有更新界面上的物品显示和条件文本**。也就是说,当你切换一级菜单时,下面的物品展示还是显示着之前的内容(比如一直显示 `npc.table[btpr][1]` 的物品),条件文本也还是"XXXX"。
要让二级菜单完全正常显示,你需要在 `playmapmove` 函数里也更新物品展示部分,就像你在 `npc:main` 函数里做的那样,根据当前选中的二级菜单来显示对应的物品。
另外,你的 `btmap` 函数目前只是打印信息,没有实际更新界面显示选中的二级菜单对应的内容。你可能需要在 `btmap` 函数里也调用类似 `say(actor, npcmap)` 来刷新界面,显示对应二级菜单的详细信息。
总结一下,要解决这个问题,你需要:
1. 在 `playmapmove` 函数中,不仅要更新一级菜单按钮的颜色和二级菜单按钮,还要更新对应的物品展示
2. 或者,在 `btmap` 函数中处理二级菜单点击后,刷新界面显示该地图的详细信息
你可以先检查一下点击二级菜单按钮时,`btmap` 函数是否被正确触发(通过你的 `release_print` 输出)。如果触发了,那么问题就是界面没有随之更新显示对应的内容。
不懂的可以问浮生梦尊师!
← 返回问答库