GUI:Animation_setDelayPerUnit(ani, timeval)
GUI:Animation_setLoops(ani, 1)
GUI:Animation_setRestoreOriginalFrame(ani, true)
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-16 18:22:51 |
👁️ 阅读: 14
这三个函数是996引擎中用于控制动画播放的重要函数:
**1. GUI:Animation_setDelayPerUnit(ani, timeval)**
- 功能:设置动画每一帧的播放间隔时间
- 参数说明:
- `ani`:动画对象,通过GUI:Animation_Create()创建
- `timeval`:每帧的延迟时间(秒),数值越小播放越快
- 示例:
```lua
local animation = GUI:Animation_Create()
GUI:Animation_setDelayPerUnit(animation, 0.1) -- 每帧间隔0.1秒
```
**2. GUI:Animation_setLoops(ani, 1)**
- 功能:设置动画循环播放次数
- 参数说明:
- `ani`:动画对象
- `1`:循环次数,1表示只播放一次,-1表示无限循环
- 示例:
```lua
GUI:Animation_setLoops(animation, 3) -- 循环播放3次
GUI:Animation_setLoops(animation, -1) -- 无限循环播放
```
**3. GUI:Animation_setRestoreOriginalFrame(ani, true)**
- 功能:设置动画播放完成后是否恢复到第一帧
- 参数说明:
- `ani`:动画对象
- `true`:播放完成后恢复到第一帧
- `false`:播放完成后停留在最后一帧
- 示例:
```lua
GUI:Animation_setRestoreOriginalFrame(animation, true) -- 播放完回到第一帧
GUI:Animation_setRestoreOriginalFrame(animation, false) -- 播放完停在最后一帧
```
**完整使用示例:**
```lua
-- 创建动画
local animation = GUI:Animation_Create()
-- 添加动画帧(假设有10张图片)
for i = 1, 10 do
local path = string.format("res/anim/frame_%d.png", i)
if SL:IsFileExist(path) then
local sprite = GUI:Sprite_Create(-1, "temp", 0, 0, path)
GUI:Animation_addSpriteFrame(animation, GUI:Sprite_getSpriteFrame(sprite))
end
end
-- 设置动画属性
GUI:Animation_setDelayPerUnit(animation, 0.05) -- 每帧0.05秒,播放较快
GUI:Animation_setLoops(animation, -1) -- 无限循环
GUI:Animation_setRestoreOriginalFrame(animation, false) -- 不恢复第一帧
-- 创建精灵并运行动画
local sprite = GUI:Sprite_Create(parent, "anim_sprite", 100, 100)
GUI:runAction(sprite, GUI:ActionRepeatForever(GUI:ActionAnimate(animation)))
```
**实际应用场景:**
1. **技能特效**:设置技能动画播放一次后消失
2. **角色动作**:设置行走动画循环播放
3. **UI动效**:设置按钮点击动画快速播放
**注意事项:**
- 在设置动画属性前,需要先通过GUI:Animation_addSpriteFrame()添加动画帧
- 动画播放速度由`timeval`控制,0.1秒是比较常见的帧间隔
- 循环次数设为1时,通常配合`setRestoreOriginalFrame(true)`使用,让动画回到初始状态
← 返回问答库