--自定义函数:执行升起动画(从当前位置底部升起)
-- @param sssWidget 要升的控件(例如图片)
-- @param targetX 目标X坐标
-- @param targetY 目标Y坐标
-- @param duration 动画持续时间(秒)
local function playRiseAnimation(sssWidget, targetX, targetY, duration)
-- 检查控件是否有效
if GUI:Win_IsNull(sssWi
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-10 00:32:44 |
👁️ 阅读: 15
当然可以!我们可以使用 `GUI:ActionSequence` 来组合移动和淡入动作,实现边升起边增加透明度(从透明到不透明)的效果。
根据浮生梦老师前端课程内容,我们需要使用 `GUI:ActionFadeIn` 来实现淡入。修改后的函数如下:
```lua
--自定义函数:执行升起动画(从当前位置底部升起,伴随淡入效果)
-- @param sssWidget 要升的控件(例如图片)
-- @param targetX 目标X坐标
-- @param targetY 目标Y坐标
-- @param duration 动画持续时间(秒)
local function playRiseAnimation(sssWidget, targetX, targetY, duration)
-- 检查控件是否有效
if GUI:Win_IsNull(sssWidget) then
SL:print("sss 控件不存在或为空")
return
end
-- 获取控件当前位置
local currentPos = GUI:getPosition(sssWidget)
local currentX = currentPos.x
local currentY = currentPos.y
-- 获取控件尺寸(用于计算底部位置)
local size = GUI:getContentSize(sssWidget)
local height = size.height or 0
-- 计算升起起始位置:从控件底部开始
-- 注意:这里假设控件的锚点是(0,0),如果锚点不同需要调整计算
local startY = currentY - height -- 从控件底部开始
-- 设置起始位置(在底部,不可见)
GUI:setPosition(sssWidget, currentX, startY)
-- 设置起始透明度为0(完全透明)
GUI:setOpacity(sssWidget, 0)
-- 确保控件可见
GUI:setVisible(sssWidget, true)
-- 创建动作序列:同时执行移动和淡入
local moveAction = GUI:ActionMoveTo(duration, targetX, targetY)
local fadeInAction = GUI:ActionFadeIn(duration)
-- 使用Spawn同时执行两个动作
local spawnAction = GUI:ActionSpawn(moveAction, fadeInAction)
-- 运行动作
GUI:runAction(sssWidget, spawnAction)
end
```
**关键修改说明:**
1. **`GUI:setOpacity(sssWidget, 0)`** - 在动画开始前将控件设置为完全透明
2. **`GUI:ActionFadeIn(duration)`** - 创建淡入动作,持续时间与移动动画相同
3. **`GUI:ActionSpawn`** - 将移动和淡入动作组合成同时执行的并行动作
这样控件就会从底部升起的同时,从透明逐渐变为不透明,实现你想要的"边伸边增加透明度"效果。
如果你想让透明度变化有不同的速度,可以调整`ActionFadeIn`的时间参数,或者使用`ActionSequence`来安排不同的时间节点。
← 返回问答库