连续点击展开收缩按钮时动作播放函数expandAction()和collapseAction()动作执行不完整,比如展开时初始坐标y为-50,终点坐标为100,实际在展开时停在了Y坐标52.666的位置,这个如何修改
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-02 18:54:54 |
👁️ 阅读: 6
这个问题涉及到连续点击时动作被中断的情况。根据浮生梦老师的前端课程内容,当连续快速点击时,新的动作会打断正在执行的动作,导致动作执行不完整。
解决方法有两种:
**方法一:使用动作序列和延迟时间**
```lua
-- 展开动作
function expandAction()
local widget = -- 你的控件对象
local moveAction = GUI:ActionMoveBy(0.3, 0, 150) -- 从-50移动到100,总共150距离
local delayAction = GUI:DelayTime(0.05) -- 添加微小延迟
local sequence = GUI:ActionSequence(moveAction, delayAction)
GUI:runAction(widget, sequence)
end
-- 收缩动作
function collapseAction()
local widget = -- 你的控件对象
local moveAction = GUI:ActionMoveBy(0.3, 0, -150) -- 从100移动到-50
local delayAction = GUI:DelayTime(0.05)
local sequence = GUI:ActionSequence(moveAction, delayAction)
GUI:runAction(widget, sequence)
end
```
**方法二:在点击时先停止所有动作**
```lua
-- 展开动作
function expandAction(widget)
GUI:stopAllActions(widget) -- 先停止所有正在执行的动作
GUI:setPosition(widget, 0, -50) -- 重置到起始位置
GUI:runAction(widget, GUI:ActionMoveBy(0.3, 0, 150))
end
-- 收缩动作
function collapseAction(widget)
GUI:stopAllActions(widget)
GUI:setPosition(widget, 0, 100) -- 重置到起始位置
GUI:runAction(widget, GUI:ActionMoveBy(0.3, 0, -150))
end
```
**方法三:使用按钮锁定(推荐)**
```lua
local isAnimating = false -- 动画状态标志
-- 按钮点击事件
GUI:addOnClickEvent(button, function()
if isAnimating then
return -- 如果正在动画中,直接返回不执行
end
isAnimating = true
if isExpanded then
collapseAction()
else
expandAction()
end
-- 动画完成后重置标志
SL:ScheduleOnce(function()
isAnimating = false
end, 0.35) -- 比动画时间长一点
end)
```
**关键点说明:**
1. `GUI:stopAllActions(widget)` 可以停止控件上的所有动作
2. `GUI:ActionSequence()` 可以组合多个动作顺序执行
3. `GUI:DelayTime()` 可以在动作序列中添加延迟
4. 使用`SL:ScheduleOnce()`进行单次延迟回调
建议使用第三种方法,因为它能有效防止连续点击导致的动作冲突,用户体验更好。
← 返回问答库