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

猜你喜欢

转载自blog.csdn.net/uisoul/article/details/82146355