animation 播放能支援 await async吗?

await anim1.play();
await anim2.play();

结果两个动画会同时播放
不使用finished callback的情况下,能否第一个动画播放完毕,才播放第二个?

1赞

不能,必须得使用finished callback 而且await 不是你这么用的,await后面是需要跟promise对象才是你要的效果

如果把spine播放改为await/async,大概是下面这样写,另外先弄清Promise/await是什么再去用,不用跟风。

// 构造一个spine的promise包装器,返回一个可返回promise对象的函数
        let generatorSpinePromiseFactroy = function( spine ){
            let spineAnimations = [];
            let spineResolveCallbacks = [];
            let spineCompleteHandler = ()=>{
                let resolveFunc = spineResolveCallbacks.shift();
                if (resolveFunc){
                    resolveFunc();
                }
                if ( spineAnimations.length>0 ){
                    spine.setAnimation(0,spineAnimations.shift(),false);
                }
            }
            spine.setCompleteListener(spineCompleteHandler );
            return ( animation )=>{
                return new Promise( (resolve,reject)=>{
                    spineResolveCallbacks.push(resolve);
                    spineAnimations.push(animation);
                    if (spineAnimations.length == 1){
                        spine.setAnimation(0,spineAnimations.shift(),false);
                    }
                } )
            }
        }
        // 用法
        let factroy = generatorSpinePromiseFactroy(spineSkeleton);
        await factroy("anim1");
        await factroy("anim2");