如何判断多个节点并行执行的动作是否完成

一个场景:父节点有多个子节点,所有子节点并行执行某一耗时动作(比如进行移动),怎么实现:
1.所有子节点动作都完成后,父节点(或其他节点)执行一次回调函数
2.任意子节点动作完成后,父节点(或其他节点)执行一次回调函数

cc.callFunc 里面可以做逻辑处理,比如判断一个数组里的标志全部为 true 了,也可以 promise 搞定

用 Promise 应该是比较好的方案了…

如下:

let promises = [];

promises.push(new Promise(res=>{
    cc.tween(node1).to(3,{x:100}).call(()=>res()).start();
}));
promises.push(new Promise(res=>{
    cc.tween(node2).to(5,{x:100}).call(()=>res()).start();
}));

await promises.all();

//并行执行不同node之间的tween并等待完成
var ctrl = { n: 2, tween: null }
var tween = cc.tween(ctrl).parallel(
cc.tween(node1).delay(2).call(() => console.log(ctrl.n)).union(),
cc.tween(node2).delay(1).call(() =>console.log(ctrl.n)).union()
).call(() => {
console.log(‘两个节点的tween都执行完成’)
}).start()

比较灵活的方法:做个计数器,新动画开始时计数+1,动画完成时计数-1
每个动画完成都回调一次“完成函数”,然后在“完成函数”里面判断计数是否为零,如果为零则表示所有动画都完成