关于龙骨workClock奇怪的问题 2.0.10

自从升级到2.0后龙骨有很多问题, 

譬如 注册监听事件必须在onLoad之后,否则无效。官方文档没有描述,1.x版本没有这个问题。

最近又发现个新的问题,各种尝试,暂时无解。因为项目需要,要使用workClock控制每个骨骼播放

龙骨节点会用nodePool回收重复使用,问题来了!经过回收后的龙骨节点不受自己创建的workClock控制了!

引擎版本:2.0.10
上demo,打开test场景,
点击生成会生成龙骨节点,自动播放动作。
点击暂停会暂停所有龙骨的动作。
点击回收会回收一个龙骨节点。

test_db.zip (203.2 KB)

@jare 大神麻烦看看

:disappointed_relieved:没人遇到过这个问题吗?workclock用来做子弹时间的呀。。

谢谢你的反馈,明天我们看下。

好的,谢谢。。
不急,我在线等 :joy:

这个复现不出来,建议你用官方范例测试一下。

这是因为你创建的龙骨节点的WorldClock,在节点被回收到重新回到场景的过程中,龙骨组件初始化了自身的骨骼动画,接管了你的WorldClock,所以你不能继续通过这行代码来控制动画速率:

update(dt) {
        if (this._pause) {
            return;
        }
        for (const actor of this._actors) {
            actor.workClock.advanceTime(dt);
        }
    }

建议你还是直接用 timeScale 来控制骨骼动画的速率吧。

这个很简单,动态new 一个 cc.Node
在添加到父节点之前添加龙骨组件,并且注册监听事件,最后再把该节点添加到父节点,这时候监听事件是无效的。

我记错了,不是升级2.0之后出现的问题,是2.0.6升级2.0.9之后出现的问题,印象中论坛也有人反应过这个。

V2.0.9版本 change log
提升 DragonBones 和 Spine 在非原生平台上的性能
之前 Cocos Creator 在 2.0.7 版本中,已经大幅优化过了 DragonBones 和 Spine 在原生平台上的性能,优化后的性能甚至比 1.9、1.10 还快了平均一倍。而这次发布的 2.0.9,则又针对 Web、小游戏等非原生平台,新增了SHARED_CACHE 和PRIVATE_CACHE 两种加速模式,使 DragonBones 的性能提升了 15 倍,Spine 的性能提升 3 - 6 倍

按照你的描述,那重新回到场景后再重新创建一个WorldClock(:joy:原来不叫workClock 一直眼瞎。。)应该是可以的呀,但我试过并不行。
暂时WorldClock最符合我的要求,因为我骨骼是异步加载的,战斗逻辑是独立的,动作播放的时间、结束我自己写了一套配置来控制,而不是用龙骨的事件。骨骼只是展示,所以有时候会直接跳帧。
看有没有办法解决这个问题,这算是个bug吧?

暂时先这样处理了

重新回到场景后,在当前帧设置WorldClock是无效的,要在下一帧设置才生效。

不过这样写代码看着 着实难受。。