1. 程式人生 > >Laya 骨骼動畫動作切換過度問題

Laya 骨骼動畫動作切換過度問題

一般播放骨骼動畫方法

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); } }