-- 自定义函数:执行下降动画(从最高位降到底部后隐藏)
local function playFallAnimation(sssWidget, targetX, targetY, duration)
-- 检查控件是否有效
if GUI:Win_IsNull(sssWidget) then
SL:print("sss 控件不存在或为空")
return
end
-- 获取控件尺寸
local size = GUI
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-10 00:29:47 |
👁️ 阅读: 22
```lua
-- 自定义函数:执行下降动画(从最高位降到底部后隐藏,同时减少透明度)
local function playFallAnimation(sssWidget, targetX, targetY, duration)
-- 检查控件是否有效
if GUI:Win_IsNull(sssWidget) then
SL:print("sss 控件不存在或为空")
return
end
-- 获取控件尺寸
local size = GUI:getContentSize(sssWidget)
local height = size.height or 0
-- 计算起始位置:在目标位置上方(最高位)
local startY = targetY + height
-- 设置起始位置(在最高位,不可见)
GUI:setPosition(sssWidget, targetX, startY)
-- 确保控件可见
GUI:setVisible(sssWidget, true)
GUI:setOpacity(sssWidget, 255) -- 确保不透明度为100%
-- 创建回调函数:动画结束后隐藏控件
local function hideWidget()
GUI:setVisible(sssWidget, false)
SL:print("下降动画完成,控件已隐藏")
end
-- 创建同时执行的动作:移动和透明度变化
local moveAction = GUI:ActionMoveTo(duration, targetX, targetY)
local fadeAction = GUI:ActionFadeTo(duration, 0) -- 透明度从255变为0
local spawn = GUI:ActionSpawn(moveAction, fadeAction) -- 同时执行
-- 创建动作序列:同时执行移动和淡出,然后隐藏
local callbackAction = GUI:CallFunc(hideWidget)
local sequence = GUI:ActionSequence(spawn, callbackAction)
GUI:runAction(sssWidget, sequence)
SL:print("下降动画开始:从Y=" .. startY .. " 下降到Y=" .. targetY .. " 同时淡出")
end
```
**修改说明:**
1. **添加了淡出效果**:使用 `GUI:ActionFadeTo(duration, 0)` 让控件在下降过程中透明度从255逐渐变为0
2. **使用ActionSpawn**:通过 `GUI:ActionSpawn()` 让移动和淡出两个动作同时执行,实现边下降边淡出的效果
3. **保持原有逻辑**:动画结束后仍然会隐藏控件
**注意**:`GUI:ActionFadeTo()` 函数在浮生梦老师前端课程内容中是标准动作函数,用于在指定时间内将控件透明度变化到目标值。这里设置为0,表示完全透明。
```lua
-- 自定义函数:执行下降动画(从最高位降到底部后隐藏,同时减少透明度)
local function playFallAnimation(sssWidget, targetX, targetY, duration)
-- 检查控件是否有效
if GUI:Win_IsNull(sssWidget) then
SL:print("sss 控件不存在或为空")
return
end
-- 获取控件尺寸
local size = GUI:getContentSize(sssWidget)
local height = size.height or 0
-- 计算起始位置:在目标位置上方(最高位)
local startY = targetY + height
-- 设置起始位置(在最高位,不可见)
GUI:setPosition(sssWidget, targetX, startY)
-- 确保控件可见
GUI:setVisible(sssWidget, true)
GUI:setOpacity(sssWidget, 255) -- 确保不透明度为100%
-- 创建回调函数:动画结束后隐藏控件
local function hideWidget()
GUI:setVisible(sssWidget, false)
SL:print("下降动画完成,控件已隐藏")
end
-- 创建同时执行的动作:移动和透明度变化
local moveAction = GUI:ActionMoveTo(duration, targetX, targetY)
local fadeAction = GUI:ActionFadeTo(duration, 0) -- 透明度从255变为0
local spawn = GUI:ActionSpawn(moveAction, fadeAction) -- 同时执行
-- 创建动作序列:同时执行移动和淡出,然后隐藏
local callbackAction = GUI:CallFunc(hideWidget)
local sequence = GUI:ActionSequence(spawn, callbackAction)
GUI:runAction(sssWidget, sequence)
SL:print("下降动画开始:从Y=" .. startY .. " 下降到Y=" .. targetY .. " 同时淡出")
end
```
**修改说明:**
1. **添加了淡出效果**:使用 `GUI:ActionFadeTo(duration, 0)` 让控件在下降过程中透明度从255逐渐变为0
2. **使用ActionSpawn**:通过 `GUI:ActionSpawn()` 让移动和淡出两个动作同时执行,实现边下降边淡出的效果
3. **保持原有逻辑**:动画结束后仍然会隐藏控件
**注意**:`GUI:ActionFadeTo()` 函数在浮生梦老师前端课程内容中是标准动作函数,用于在指定时间内将控件透明度变化到目标值。这里设置为0,表示完全透明。
← 返回问答库