CallFunc(callback)怎么用
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-10 01:06:03 |
👁️ 阅读: 0
`GUI:CallFunc(callback)` 是用于在动作序列中插入一个回调函数的动作节点。
**核心用途:**
在运行动画(`ActionSequence`)时,在特定时刻执行一段你指定的Lua代码。
**使用步骤:**
1. **定义回调函数:**
先写一个普通的Lua函数,里面放你想执行的代码。
```lua
local function myCallback()
SL:print("动画执行到这里了,开始执行我的逻辑!")
-- 可以在这里做任何事,比如隐藏控件、发送请求等
end
```
2. **创建动作序列并插入 CallFunc:**
将 `GUI:CallFunc(myCallback)` 作为一个动作,放入 `GUI:ActionSequence` 中。
```lua
-- 创建一个动作序列:先等待1秒,然后执行回调,最后淡出
local sequence = GUI:ActionSequence(
GUI:DelayTime(1.0), -- 等待1秒
GUI:CallFunc(myCallback), -- 执行回调函数
GUI:ActionFadeTo(0.5, 0) -- 在0.5秒内淡出到完全透明
)
```
3. **运行动作序列:**
将序列应用到控件上。
```lua
GUI:runAction(myWidget, sequence)
```
**关键要点:**
- `CallFunc` 本身不产生动画效果,它只是一个“触发器”。
- 它在动作序列中的位置决定了回调执行的时机。
- 回调函数**不能有参数**。如果需要在回调中操作特定控件,请使用闭包(Upvalue):
```lua
local targetWidget = myWidget
local function callback()
GUI:setVisible(targetWidget, false) -- 操作外部变量
end
local seq = GUI:ActionSequence(GUI:CallFunc(callback))
```
**一个完整案例(浮生梦老师课程风格):**
```lua
-- 1. 创建界面
local parent = GUI:Win_Create("TestWin", 0, 0, 0, 0, false, false, true, false, false, false, 1)
local btn = GUI:Button_Create(parent, "btn_test", 100, 100, "res/public/1900000612.png")
GUI:Button_setTitleText(btn, "点我动画")
-- 2. 定义回调(动画结束后打印并隐藏按钮)
local function animationFinished()
SL:print("动画播放完毕!")
GUI:setVisible(btn, false)
end
-- 3. 创建并运行动作序列
local action = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 1.5), -- 放大到1.5倍
GUI:ActionScaleTo(0.2, 1.0), -- 缩回原样
GUI:CallFunc(animationFinished) -- 执行结束回调
)
GUI:runAction(btn, action)
```
记住这个模式:**`CallFunc` 让你把Lua代码“挂”到动画时间轴上,在精确的时刻执行。**
← 返回问答库