一般播放骨骼动画方法
this.skeleton.play(aniname,true);//动画名字,重复播放
切换动作也是调用这个方法,传入不同的aniname
但是这样会导致一个问题:
上一个动作未播放完毕,突然切换到第二个动作,显然动画不连贯,有一种跳动的感觉
解决办法
//加载动画
load(aniUrl: string,emoji?:string):void{
if (!aniUrl||aniUrl=='') {
return;
}
if (aniname) {
this.aniname=aniname;
}
this.aniUrl = aniUrl;
this.templet = new Templet();
this.templet.on(Event.COMPLETE, this, this.parseComplete);
// this.templet.on(Event.ERROR, this, this.onError);
this.templet.loadAni(this.aniUrl);
}
private parseComplete():void {
//创建模式为1,可以启用换装
this.skeleton =this.templet.buildArmature(1);
this.skeleton.x = this.mStartX;
this.skeleton.y = this.mStartY;
this.skeleton.scale(this.scaleper, this.scaleper);
//监听动画是否完成播放
this.skeleton.on(Event.STOPPED,this,this.stopHandler);
this.play(this.aniname);
this.addChild(this.skeleton);
}
private stopHandler():void{
if (this.skeleton) {
//循环播放,控制播放完一次后需要从0开始重新播放,代替循环播放参数
this.play(this.aniname);
}
}
//切换动作
public changeAni(aniname:string):void{
if (aniname) {
this.aniname=aniname;
}
var starttime = 0 ;
if (this.skeleton) {
//切换表情,从当前播放位置切换,防止跳动
starttime = this.skeleton.player.currentPlayTime;
}
this.play(this.aniname,starttime);
}
private play(aniname:string,start?:number):void{
if (this.skeleton) {
//禁止自动循环播放,控制播放完一次后需要从0开始重新播放
this.skeleton.play(aniname,false,true,start);
}
}