怎么让基础容器从中间先压缩成一条线然后再慢慢回到原来的大小
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-30 12:54:42 |
👁️ 阅读: 3
要实现基础容器从中间压缩成一条线再慢慢回到原大小的动画效果,可以使用以下代码:
```lua
-- 创建父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建基础容器(Layout)
local layout = GUI:Layout_Create(parent, "my_layout", 200, 200, 300, 200)
GUI:setAnchorPoint(layout, 0.5, 0.5) -- 设置锚点为中心,这样缩放会从中心进行
-- 设置初始状态为原始大小
GUI:setScale(layout, 1, 1)
-- 创建动画序列
local function playAnimation()
-- 第一步:从中间压缩成一条线(水平方向压缩到0)
local scaleToZero = GUI:ActionScaleTo(0.3, 0, 1) -- 水平压缩到0,垂直保持1
-- 第二步:延迟一小段时间
local delay = GUI:DelayTime(0.1)
-- 第三步:慢慢回到原来大小
local scaleToOriginal = GUI:ActionScaleTo(0.5, 1, 1) -- 回到原始大小
-- 组合动画序列
local sequence = GUI:ActionSequence(scaleToZero, delay, scaleToOriginal)
-- 执行动画
GUI:runAction(layout, sequence)
end
-- 调用动画函数
playAnimation()
```
**函数说明:**
1. **GUI:setAnchorPoint(widget, x, y)** - 设置控件的锚点
- `x`:水平锚点(0-1,0.5表示中心)
- `y`:垂直锚点(0-1,0.5表示中心)
2. **GUI:ActionScaleTo(time, scaleX, scaleY)** - 创建缩放动作
- `time`:动画持续时间(秒)
- `scaleX`:水平缩放比例(0表示压缩成一条线)
- `scaleY`:垂直缩放比例
3. **GUI:DelayTime(time)** - 创建延迟动作
- `time`:延迟时间(秒)
4. **GUI:ActionSequence(...)** - 创建顺序播放的动作序列
- 可以传入多个动作对象,按顺序执行
5. **GUI:runAction(widget, action)** - 在控件上运行动作
**动画流程:**
1. 首先将容器水平方向压缩到0(变成一条垂直线)
2. 延迟0.1秒
3. 然后慢慢恢复到原始大小
**注意:**
- 锚点设置为(0.5, 0.5)很重要,这样缩放会从容器的中心点开始
- 你可以根据需要调整动画时间和延迟时间
- 如果想要垂直方向压缩,可以将`scaleY`设为0,`scaleX`保持1
← 返回问答库