function qiehuan(actor)
local k = SL:GetMetaValue("SCREEN_WIDTH")
local g = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建父节点
local parent = GUI:Win_Create("MapChangeContainer", 0, 0, 0, 0, false, false, true, false, false, false, 1)
--
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-15 13:03:45 |
👁️ 阅读: 15
根据浮生梦老师前端课程内容,要实现你描述的动画效果,需要结合多个动作函数。以下是完整的代码实现:
```lua
function qiehuan(actor)
local k = SL:GetMetaValue("SCREEN_WIDTH")
local g = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建父节点
local parent = GUI:Win_Create("MapChangeContainer", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建容器在屏幕正上方
local containerWidth = 200
local containerHeight = 63
local posX = k / 2 - containerWidth / 2
local posY = g - 163
-- 创建容器
local container = GUI:Layout_Create(parent, "top_container", posX, posY, containerWidth, containerHeight, false)
-- 添加背景
local bg = GUI:Image_Create(container, "bg_image", 0, 0, "res/xixi/ditu/3.png")
GUI:setContentSize(bg, containerWidth, containerHeight)
-- 设置容器初始位置(从上方50位置开始)
GUI:setPosition(container, posX, posY + 50)
-- 设置容器初始透明度为0(完全透明)
GUI:setOpacity(container, 0)
-- 创建动画序列
local function hideCallback()
GUI:setVisible(container, false)
end
local actionSequence = GUI:ActionSequence(
-- 淡入动画
GUI:ActionSpawn(
GUI:ActionFadeIn(0.3), -- 淡入效果
GUI:ActionMoveBy(0.3, 0, -50) -- 从上方50位置移动到目标位置
),
-- 延迟0.5秒
GUI:DelayTime(0.5),
-- 淡出动画
GUI:ActionSpawn(
GUI:ActionFadeOut(0.3), -- 淡出效果
GUI:ActionMoveBy(0.3, 0, -30) -- 继续向上移动30像素
),
-- 隐藏容器
GUI:CallFunc(hideCallback)
)
-- 执行动画
GUI:runAction(container, actionSequence)
end
```
**代码说明:**
1. **初始设置**:
- 容器初始位置在目标位置上方50像素处
- 初始透明度设置为0(完全透明)
2. **动画序列**:
- **第一段**:同时执行淡入(0.3秒)和向下移动(50像素)动画
- **第二段**:延迟0.5秒
- **第三段**:同时执行淡出(0.3秒)和继续向上移动(30像素)动画
- **第四段**:调用回调函数隐藏容器
3. **函数说明**:
- `GUI:ActionSequence()`:按顺序执行多个动作
- `GUI:ActionSpawn()`:同时执行多个动作
- `GUI:ActionFadeIn()`:淡入效果
- `GUI:ActionFadeOut()`:淡出效果
- `GUI:ActionMoveBy()`:相对移动
- `GUI:DelayTime()`:延迟等待
- `GUI:CallFunc()`:执行回调函数
- `GUI:setOpacity()`:设置透明度
- `GUI:setVisible()`:设置可见性
这样就能实现容器从上方50像素位置淡入到目标位置,停留0.5秒后淡出并向上移动,最后隐藏的完整动画效果。
根据浮生梦老师前端课程内容,要实现你描述的动画效果,需要结合多个动作函数。以下是完整的代码实现:
```lua
function qiehuan(actor)
local k = SL:GetMetaValue("SCREEN_WIDTH")
local g = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建父节点
local parent = GUI:Win_Create("MapChangeContainer", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建容器在屏幕正上方
local containerWidth = 200
local containerHeight = 63
local posX = k / 2 - containerWidth / 2
local posY = g - 163
-- 创建容器
local container = GUI:Layout_Create(parent, "top_container", posX, posY, containerWidth, containerHeight, false)
-- 添加背景
local bg = GUI:Image_Create(container, "bg_image", 0, 0, "res/xixi/ditu/3.png")
GUI:setContentSize(bg, containerWidth, containerHeight)
-- 设置容器初始位置(从上方50位置开始)
GUI:setPosition(container, posX, posY + 50)
-- 设置容器初始透明度为0(完全透明)
GUI:setOpacity(container, 0)
-- 创建动画序列
local function hideCallback()
GUI:setVisible(container, false)
end
local actionSequence = GUI:ActionSequence(
-- 淡入动画
GUI:ActionSpawn(
GUI:ActionFadeIn(0.3), -- 淡入效果
GUI:ActionMoveBy(0.3, 0, -50) -- 从上方50位置移动到目标位置
),
-- 延迟0.5秒
GUI:DelayTime(0.5),
-- 淡出动画
GUI:ActionSpawn(
GUI:ActionFadeOut(0.3), -- 淡出效果
GUI:ActionMoveBy(0.3, 0, -30) -- 继续向上移动30像素
),
-- 隐藏容器
GUI:CallFunc(hideCallback)
)
-- 执行动画
GUI:runAction(container, actionSequence)
end
```
**代码说明:**
1. **初始设置**:
- 容器初始位置在目标位置上方50像素处
- 初始透明度设置为0(完全透明)
2. **动画序列**:
- **第一段**:同时执行淡入(0.3秒)和向下移动(50像素)动画
- **第二段**:延迟0.5秒
- **第三段**:同时执行淡出(0.3秒)和继续向上移动(30像素)动画
- **第四段**:调用回调函数隐藏容器
3. **函数说明**:
- `GUI:ActionSequence()`:按顺序执行多个动作
- `GUI:ActionSpawn()`:同时执行多个动作
- `GUI:ActionFadeIn()`:淡入效果
- `GUI:ActionFadeOut()`:淡出效果
- `GUI:ActionMoveBy()`:相对移动
- `GUI:DelayTime()`:延迟等待
- `GUI:CallFunc()`:执行回调函数
- `GUI:setOpacity()`:设置透明度
- `GUI:setVisible()`:设置可见性
这样就能实现容器从上方50像素位置淡入到目标位置,停留0.5秒后淡出并向上移动,最后隐藏的完整动画效果。
← 返回问答库