淡入淡出效果如何使用
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-23 20:24:26 |
👁️ 阅读: 10
在996引擎中,实现淡入淡出效果主要有两种方式:**动作系统**和**时间轴动画**。下面我将为你详细说明并展示代码示例。
### 方式一:使用动作系统(Action)
动作系统适合组合多个动作(如移动、缩放后淡出),通过`GUI:ActionSequence`串联。
**1. 淡入动作:**
```lua
-- 假设widget是你的控件(如一个图片或面板)
-- 淡入时间0.5秒
GUI:runAction(widget, GUI:ActionFadeIn(0.5))
```
**2. 淡出动作:**
```lua
-- 淡出时间0.5秒
GUI:runAction(widget, GUI:ActionFadeOut(0.5))
```
**3. 组合动作示例(先放大再淡出):**
```lua
local function onComplete()
SL:print("淡出完成!")
end
local sequence = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 120), -- 2秒放大到120%
GUI:ActionFadeOut(0.5), -- 0.5秒淡出
GUI:CallFunc(onComplete) -- 完成后回调
)
GUI:runAction(widget, sequence)
```
**重要提示:** 使用淡出前,确保控件初始透明度为255(不透明),否则可能看不到效果。可使用`GUI:setOpacity(widget, 255)`设置。
### 方式二:使用时间轴动画(Timeline)
时间轴动画更适合简单的单效果播放,接口更直接。
**1. 淡入动画:**
```lua
-- 淡入时间1秒,可选的完成回调
GUI:Timeline_FadeIn(widget, 1.0, function()
SL:print("淡入完成")
end)
```
**2. 淡出动画:**
```lua
-- 淡出时间1秒
GUI:Timeline_FadeOut(widget, 1.0)
```
**3. 淡入到指定透明度:**
```lua
-- 在2秒内将透明度调整到128(半透明)
GUI:Timeline_FadeTo(widget, 128, 2.0)
```
### 实际应用案例
假设你要创建一个提示面板,出现时淡入,3秒后自动淡出消失:
```lua
-- 创建父窗口(作为背景层)
local parent = GUI:Win_Create("TipWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建提示面板(使用案例中的背景图)
local tipPanel = GUI:Widget_Create(parent, "tip_panel", 100, 100, 300, 150)
GUI:Widget_setBackGroundImage(tipPanel, "res/public_win32/1900000610.png", 0)
-- 创建提示文字
local tipText = GUI:Text_Create(tipPanel, "Text_tip", 50, 75, 20, "#FFFFFF", "这是一条提示")
GUI:Text_setFontName(tipText, "fonts/font5.ttf")
-- 1. 初始设置为完全透明
GUI:setOpacity(tipPanel, 0)
-- 2. 执行淡入动画(1秒)
GUI:Timeline_FadeIn(tipPanel, 1.0, function()
SL:print("提示已完全显示")
-- 3. 延迟3秒后淡出
SL:ScheduleOnce(function()
GUI:Timeline_FadeOut(tipPanel, 1.0, function()
SL:print("提示已淡出")
-- 移除控件
GUI:removeFromParent(tipPanel)
end)
end, 3.0)
end)
```
### 核心区别总结
| 特性 | 动作系统(Action) | 时间轴动画(Timeline) |
|------|-------------------|----------------------|
| **主要用途** | 多个动作组合播放 | 单个特效独立播放 |
| **淡入函数** | `GUI:ActionFadeIn(time)` | `GUI:Timeline_FadeIn(widget, time, callback)` |
| **淡出函数** | `GUI:ActionFadeOut(time)` | `GUI:Timeline_FadeOut(widget, time, callback)` |
| **回调位置** | 通过`GUI:CallFunc()`在序列中 | 直接作为参数传入 |
| **控制精度** | 可精确控制每个动作时长和顺序 | 简单直接,适合单一效果 |
### 常见问题
1. **控件没显示?** 检查是否已添加到父节点,且父节点已创建。
2. **淡出后控件还在?** 淡出只是改变透明度,如需移除要调用`GUI:removeFromParent()`。
3. **想中途停止?** 使用`GUI:Timeline_StopAll(widget)`停止所有时间轴动画。
选择哪种方式取决于你的需求:简单淡入淡出用时间轴,复杂动作组合用动作系统。
← 返回问答库