cc.Tween 使用的困惑&是不是应该将tween 与action 分离出来重新实现

  1. 测试思路。
    testNode 一直旋转,当有外部结束testNode动画时 将nodeA放入NodePool 中待下次使用

    在之前用unity 的dotween 中可以这样实现
    let testNode = nodepool.get()
    let tweener = Dotween.sequence()
    tweener.target = this.node
    tweener.append( testNode.DORotate(…))
    tweener.oncomplete( ()=>{
    nodepool.put(testNode)
    })
    /// 这种方式 不管创建有多少个testnode 一行代码就能结束所有 testnode的动画
    this.node.DOKill( true) //

然后在creator 中出了单独用一个数组之类的记录 创建了那些testnode 然后一一结束他们并放入nodepool这种方法以外好像没其他办法了
测试代码1
想也知道 complete 永远不回打印出来
cc.tween( this.testNode).repeatForever( cc.rotateBy( 1, 360)).call(()=>{
console.log( “complete!”)
}).start()

测试代码2 这里tween 始终会覆盖then 加入的tween的target 所以下面这段代码也无法做到
let tweenA = cc.tween( this.node).repeatForever( cc.rotateBy( 1, 360))
cc.tween( this.testNode).then( tweenA).call( ()=>{
console.log( “complete!”)
}).start()
测试代码3 一样不行
let action = cc.rotateBy( 10, 360)
action.setTarget( this.node)
let sequence = cc.sequence( action, cc.callFunc( ()=>{
console.log( “complete!”)
}))
this.testNode.runAction(sequence)

所以 请问creator 中要实现这个功能该如何写(tweenlite 是不是可以拿过来直接用呢)

没看懂需求,用nodePool的话为什么还要用数组记录
一直旋转的动画如果复用的时候要继续保持,直接从nodePool拿出来就可以用了,会继续转,
如果需要用的时候还原回原本的状态就在放进nodepool之前stopallactions掉

这里只是举个例子
问题是 pool 取出来的node 在执行动画的过程中可能打断然后重新放回pool 里面, 这里取出来的node 个数不是固定的。那么就需要用数组来记录娶了多少个来一一stopaction 再放回pool 中。

createAnimeNode里加一个 chip.stopAllActions() 可以不?

这里主要想快速停止 pool已经取出来的节点正在执行的动作。 如果等节点动作执行到最后的call放入pool 的话会出现界面上在不该现实的时候显示了其他东西

所以我认为tween 还是有待完善的地方,或考虑重新那啥一下

下个版本会提供 stopAllByTag/stopAllByTarget/stopAll,能满足你的需求吗?

主要是 target 和startwithtarget 冲突了,动作没有完成回调。现有的tween 应该是不行要额外加东西才行。

功能我已经通过其他方式做了,只是 觉得现有的tween 和 之前unity 用的还是有很大的不方便。

不不不,这都不重要,重要的是场景切换等等操作导致节点被销毁的时候不要出错,先稳定再说好用不好用