如何用await/async来实现Action系统?

比如我现在的代码
let act0_0=xxx;
let act0_1=xxx;
let act0_2=xxx;
let act0=cc.sequence(act0_0,act0_1,act0_2);
node.runAction(act0);
但是我要等node完成这个任务后
再让node1执行新的任务。
现在的代码里是需要node1去等待node的任务时间才行。
有没有什么方法能
await runTask(node.runAction(xxx));
await runTask(node1.runAction(xxx));

那这个runTask怎么实现?

动画串后加个回调就行了啊,cc.callbackfunc 可能拼错,看看api

let act0=cc.moveTo(…);
let call0=cc.callFunc(()=>{
node2.runAction(other_act);
});
let seq=cc.sequence(act0,call0);
node1.runAction(seq);

这样的node2需要写在call0中,不合逻辑啊,难道用瀑布流:
node0.runAction(…()=>{
node1.runAction(()=>{
node3.runAction();
});
});
这样难看啊,改动起来也麻烦

async runActionSync(node: cc.Node, action: cc.Action): Promise<any>{
     return new Promise(resolve => node.runAction(cc.sequence(action, cc.callFunc(resolve))))
}

//how to use
await runActionSync(node, action)

推荐一个第三方库

http://bluebirdjs.com/docs/api/promise.fromcallback.html

await Promise.fromCallback((callback) => {
      const scaleTo = cc.scaleTo(0.2, 0);
      const callFunc = cc.callFunc(() => {
          callback(null);
      });
      this.node.runAction(cc.sequence(scaleTo, callFunc));
});
1赞

感谢感谢!
我一直不知道resolve如何判断完成了,还在想另开一个update检测行动组,判断这个action是否isDone。

我是用ts的所以上面大神的思路直接可以用。
用js的朋友,可以参考你的!

一样,js ts都可以