你的代码已经实现了点击二级菜单按钮改变文字颜色的功能,但有一个小问题:你的二级菜单按钮点击事件是在一级菜单点击事件内部创建的,这会导致每次点击一级菜单时,都会为二级菜单按钮重新绑定一次点击事件,可能会造成事件重复绑定。
建议将二级菜单按钮的事件绑定移到一级菜单事件外部,或者确保只绑定一次。这里提供一个优化后的版本:
```lua
function npc:openWin()
-- 创建外部界面
local win_hecheng = GUI:Win_Create("win_hecheng", 0, 0, 0, 0)
GUI:LoadExport(win_hecheng, "hecheng")
npc.ui = GUI:ui_delegate(win_hecheng)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_hecheng)
end)
local selectBtn1 = ""
local selectBtn2 = ""
-- 初始化二级菜单按钮标题
GUI:Button_setTitleText(npc.ui.btn2_1, "偃月")
GUI:Button_setTitleText(npc.ui.btn2_2, "降魔")
GUI:Button_setTitleText(npc.ui.btn2_3, "无极棍")
GUI:Button_setTitleText(npc.ui.btn2_4, "骨玉权杖")
-- 为所有二级菜单按钮预先绑定点击事件
for i = 1, 4 do
local btn2 = GUI:getChildByName(npc.ui.Node_2, "btn2_"..i)
GUI:addOnClickEvent(btn2, function()
-- 二级菜单按钮颜色切换
if selectBtn2 and not GUI:Win_IsNull(selectBtn2) then
GUI:Button_setTitleColor(selectBtn2, "#ffffff")
end
selectBtn2 = btn2
GUI:Button_setTitleColor(btn2, "#ff0000")
end)
end
-- 为一级菜单按钮绑定事件
for k, v in ipairs(npc.synthesis) do
local btn1 = GUI:getChildByName(npc.ui.bg, "btn1_"..k)
-- 默认一级菜单第一个按钮是绿色
if k == 1 then
GUI:Button_setTitleColor(btn1, "#00ff00")
selectBtn1 = btn1
else
GUI:Button_setTitleColor(btn1, "#ffffff")
end
GUI:addOnClickEvent(btn1, function()
-- 一级菜单按钮颜色切换
if selectBtn1 and not GUI:Win_IsNull(selectBtn1) then
GUI:Button_setTitleColor(selectBtn1, "#ffffff")
end
selectBtn1 = btn1
GUI:Button_setTitleColor(btn1, "#00ff00")
-- 更新二级菜单按钮标题
for m, n in ipairs(v) do
local btnName = n.name
local btn2 = GUI:getChildByName(npc.ui.Node_2, "btn2_"..m)
GUI:Button_setTitleText(btn2, btnName)
-- 默认二级菜单第一个按钮是红色
if m == 1 then
GUI:Button_setTitleColor(btn2, "#ff0000")
selectBtn2 = btn2
else
GUI:Button_setTitleColor(btn2, "#ffffff")
end
end
end)
end
end
```
主要改进:
1. 将二级菜单按钮的点击事件绑定移到了循环外部,确保只绑定一次
2. 一级菜单点击时只更新二级菜单的标题和颜色,不再重新绑定事件
3. 进入界面后,点击二级菜单按钮可以直接改变颜色
这样修改后,进入界面点击二级菜单按钮时,颜色会立即改变,不会因为事件重复绑定而产生问题。