你的代码有几个问题需要修正。让我帮你分析一下:
## 主要问题:
1. **`GUI:addClick` 函数不存在** - 应该使用 `GUI:addOnClickEvent`
2. **`SL:ScheduleOnce` 使用错误** - 不能直接传入控件作为参数
3. **`canClick` 变量作用域问题** - 需要在函数外部定义
## 修正后的代码:
```lua
-- 创建父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建按钮
local main_btn = GUI:Button_Create(parent, "main_btn", 100, 100, "res/public/1900000612.png")
GUI:Button_setTitleText(main_btn, "点击按钮")
-- 定义按钮点击状态(在函数外部定义)
local canClick = true
-- 按钮动画效果
local function btnAction()
if not canClick then
return
end
-- 设置按钮不可点击状态
canClick = false
SL:Print("按钮被点击")
-- 这里放你原来的动画代码...
local list = npc.childBtnList
-- 所有子按钮缩回原位
for a = 1, #npc.config.mainName do
for _, c in ipairs(list[a]) do
GUI:Timeline_MoveTo(c.btn, {x = 0, y = 164}, 0.4, function() end)
end
end
-- 展开点击的按钮
for _, e in ipairs(list[k]) do
local id = e.id
local btn = e.btn
local Pos_yBtn = 164 - (id * 34)
GUI:Timeline_MoveTo(btn, {x = 0, y = Pos_yBtn}, 0.4, function() end)
end
-- 被点击按钮下方主按钮(包括子按钮)向下平移
-- 如果被点击按钮是6,则不需要平移动画
if k >= 6 then
return
else
-- 被点击按钮小于6, 做平移动画(移动按钮基础容器)
for i = k + 1, #npc.config.mainName do
local panelAction = GUI:getChildByName(npc.ui.Panel_main, "Panel"..i)
SL:print(panelAction,"//",i)
if panelAction then
local panel_y = 250 - ((i-1)*34) - #npc.config.childName[k]*32
SL:print(panel_y)
GUI:Timeline_MoveTo(panelAction, {x = 0, y = panel_y}, 0.4, function() end)
end
end
end
-- 所有下方按钮组复位
for i = 1, #npc.config.mainName do
local panel_y = GUI:getChildByName(npc.ui.Panel_main, "Panel"..i)
if panel_y then
local initialY = 250 - ((i-1) * 33)
GUI:Timeline_MoveTo(panel_y, {x = 0, y = initialY}, 0.4, function() end)
end
end
-- 使用SL:ScheduleOnce延迟0.5秒后恢复点击
SL:ScheduleOnce(function()
canClick = true
SL:Print("按钮可以再次点击了")
end, 0.5)
end
-- 正确的添加点击事件方式
GUI:addOnClickEvent(main_btn, btnAction)
```
## 关键修正点:
1. **`GUI:addOnClickEvent`** - 这是正确的添加点击事件函数
2. **`canClick` 变量位置** - 需要在函数外部定义,否则每次点击都会重置
3. **`SL:ScheduleOnce` 正确用法** - 第一个参数是回调函数,第二个参数是延迟时间
这样修改后,按钮点击后会有0.5秒的冷却时间,防止重复点击。注意:`k` 变量在你的代码中没有定义,需要确保它在函数外部有正确的值。
下次写代码时要注意函数名和变量作用域哦!不懂的可以问浮生梦老师!