Skip to content

动画(Tween)

LM.Tween可以用来在两个值之间 平滑过渡(插值),并配合缓动函数(easing)实现自然的动画效果。

基本用法

typescript
// 创建一个图片
let img = new LM.ImgView();
// 创建一个动画对象,动画会自动执行
let tween = LM.Tween.get(img)
// 直接进行链式调用 注意后面不用加分号
// 1000 ms 让img移动到x=100、不透明度125
.to({x:100,alpha:125},1000)
// 上方动画结束后 执行函数调用
.call((=> {
      // 镜像
      img.isMirrored = true;
 });
 // 等待200ms
.wait(200)
// 上方等待结束后 执行函数调用
.call(() => {
      img.visible = false;
 });

 // 想要移除动画 可以通过调用动画对象上的remove方法 tween.remove();

get

获取一个动画对象。

序号参数解释默认值
1target可以是任意组件,如图片、文字、骨骼动画、容器等
2loop动画是否循环,可不填布尔值false
3isTuretTime大部分情况下不用填写使用默认值即可。true使用现实时间,false使用工程帧时间,可不填。使用真实时间可能会出现工程掉帧/卡顿后动画不连贯,如果动画事件与现实时间无关联,建议不填写 使用工程帧时间。布尔值false

to

把获取的对象的数值属性变化到这个状态,会等它执行完以后才执行下一条。to的第二个参数是时间,单位毫秒。 第三个参数是缓动函数,不填就是正常插值动画,填写了缓动函数后,动画会根据缓动函数进行缓动。

typescript
let bar = new LM.ProgressBar;
bar.current = 0;
Tween.get(obj)
.to({current:100},1000)

let img = new LM.ImgView();
Tween.get(img)
// 这里Ease使用内置的函数库
.to({x:100,y:100},1000,LM.Ease.ExpoInOut)


let text = new LM.TextView();
Tween.get(text)
//这里Ease 使用自定义函数,可以自己写一个函数,也可以使用第三方的函数库,传入时刻进度, 返回当前动画进度。
.to({x:100},1000,function (t) {
   return  -Math.pow(2, -10 * t) + 1 ;
})
序号参数默认值
1最终状态对象上的属性
2数值,必须填
3缓动函数,通过传入缓动函数可对动画进行自定义缓动例:LM.Ease.BackIn见下文缓动方式

wait

等待,单位毫秒,会等它执行完以后才执行下一条。

call

动画执行完毕的回调。

缓动方式

缓动解释示例(x轴为时间,y轴为动画进度归一化值)
Normal正常,没有特殊缓动效果
xy
BackIn回弹缓入,动画开始时产生轻微回弹效果
xy
BackInOut回弹缓入缓出,动画开始和结束时都产生轻微回弹效果
xy
BackOut回弹缓出,动画结束时产生轻微回弹效果
xy
CircIn圆形缓入
xy
CircInOut圆形缓入缓出
xy
CircOut圆形缓出
xy
CubicIn三次方缓入
xy
CubicInOut三次方缓入缓出
xy
CubicOut三次方缓出
xy
ElasticIn弹性缓入,动画开始时模拟弹性效果
xy
ElasticInOut弹性缓入缓出,动画开始和结束时都模拟弹性效果
xy
ElasticOut弹性缓出,动画结束时模拟弹性效果
xy
ExpoIn指数缓入,动画开始时速度变化较快
xy
ExpoInOut指数缓入缓出,动画开始和结束时速度变化都较快
xy
ExpoOut指数缓出,动画结束时速度变化较快
xy
QuadIn二次方缓入,动画开始时速度较慢,逐渐加快
xy
QuadInOut二次方缓入缓出,动画开始和结束时速度都较慢,中间速度较快
xy
QuadOut二次方缓出,动画结束时速度较慢,逐渐减速
xy
QuartIn四次方缓入
xy
QuartInOut四次方缓入缓出
xy
QuartOut四次方缓出
xy
QuintIn五次方缓入
xy
QuintInOut五次方缓入缓出
xy
QuintOut五次方缓出
xy
SineIn正弦缓入
xy
SineInOut正弦缓入缓出
xy
SineOut正弦缓出
xy

示例

typescript
let img = new LM.ImgView();
img.src = "graphics/教学采集界面素材/橙娘.png";
this.addChild(img);
img.y = 200;
let tween = LM.Tween.get(img, true)
.to({ x: 600 }, 1000)
.wait(1000)