Laya 骨骼動畫動作切換過度問題
阿新 • • 發佈:2018-11-10
一般播放骨骼動畫方法
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);
}
}