[]发现TimeLine的一些问题,像是BUG

 问题一,图片缓动监听播放完毕后,在回调函数立即再播一次,图片移至初始位置,并且没有播放。
如果在回调函数里加一个小的延迟再播,一切正常。

11.png

 
问题二,比如图片初始位置y=50,我设定缓动动画为移动到200后,在回调函数里改变y=350,再播一次,结果图片还是从y=50(最早的初始点)开始移动,官方的api说的“to”是从当前位置开始,所以感觉有问题
 
具体可以看我的demo,直接运行即可观察到现象
已邀请:

cuixueying

赞同来自:

package {
import laya.display.Sprite;
import laya.events.Event;
import laya.net.Loader;
import laya.utils.Ease;
import laya.utils.Handler;
import laya.utils.Stat;
import laya.utils.TimeLine;

public class AirDemo
{
private var sp1:Sprite;
private var sp2:Sprite;
private var sp3:Sprite;

private var timeLine1:TimeLine;
private var timeLine2:TimeLine;
private var timeLine3:TimeLine;

public function AirDemo()
{
//初始化引擎
Laya.init(600, 400);
Stat.show();

//加载引擎需要的资源
Laya.loader.load([{url: "res/atlas/comp.json", type: Loader.ATLAS}], Handler.create(this, onLoaded));
}

private function onLoaded():void {
//实例UI界面
Laya.stage.bgColor="#353535";

sp1=createSprite(50,50);//创建方块1
sp2=createSprite(250,50);//创建方块2
sp3=createSprite(450,50);//创建方块3

addTime(timeLine1,sp1,200);//sp1添加缓动,从50到200的位置
addTime(timeLine2,sp2,200);//sp2添加缓动,从50到200的位置
addTime(timeLine3,sp3,200);//sp3添加缓动,从50到200的位置

}
//创建方块的函数
private function createSprite(xx:int,yy:int):Sprite
{
var sp:Sprite=new Sprite();
sp.graphics.drawRect(0, 0, 50, 50, "#ffffff");
sp.x=xx;
sp.y=yy;
Laya.stage.addChild(sp);
return sp;
}
//添加缓动的函数
private function addTime(timeLine:TimeLine,sp:Sprite,yy:Number):void
{
timeLine=new TimeLine();
timeLine.to(sp, {y: yy}, 3000, Ease.linearIn);
timeLine.once(Event.COMPLETE,this, complete,[sp,timeLine]);
timeLine.play(0,false);
}
//清理缓动的函数
private function clearTime(timeLine:TimeLine):void
{
timeLine.destroy();
}
//缓动播放完成后的回调
private function complete(sp:Sprite,timeLine:TimeLine):void
{
//缓动播放完成后,将旧的缓动销毁
timeLine.destroy();
//如果sp1的缓动完成了,重新制定下次的缓动
if(sp===sp1)
{
reTime(timeLine1,sp1);
}
//如果sp2的缓动完成了,重新制定下次的缓动
if(sp===sp2)
{
reTime(timeLine2,sp2);
}
//如果sp2的缓动完成了,重新制定下次的缓动
if(sp===sp3)
{
reTime(timeLine3,sp3);
}
}
//第二次缓动调用的封装函数
private function reTime(timeLine:TimeLine,sp:Sprite):void
{
if(sp.y==50)//当前缓动位置如果在50,就向200处缓动
{
addTime(timeLine,sp,200);
}
else if(sp.y==200)//当前缓动位置如果在200,就向50处缓动
{
addTime(timeLine,sp,50);
}
}
}
}

要回复问题请先

商务合作
商务合作