骨骼动画事件问题

骨骼动画用playAnimation进行播放,次数为1,然后也注册了播放完毕事件:
this.skin.ani.addEventListener(dragonBones.EventObject.COMPLETE
但是该事件没有按照预期进行响应,不知道什么原因

可以尝试更改一下animation cache mode的参数

初步测试可能是因为事件没有注册成功,因为有时候有效果,有时又没有,是不是要等骨骼加载完了才能绑定事件,如果是,那什么事件代表骨骼加载完了呢

那你改过animation cache mode的参数没有,如果你怀疑是加载问题的话可以scheduleonce等个几秒再注册

尝试设置了一下this.ani.setAnimationCacheMode(dragonBones.ArmatureDisplay.AnimationCacheMode.REALTIME)模式,貌似可以了,只是不太清楚这样用的目 的,虽然百度了一下这个参数,但还不是特别清楚。继续再观察下看问题会不会反复

AnimationCacheMode.REALTIME添加了后,今早试还是不行了…因为我的场景中一共会有8个人物,如果只上场一个就不容易出现这个问题,如果上多几个就容易出现,所以怀疑是变量被覆盖或是骨骼没来得急加载完,不过第一种可能性作了很多次检查,可能性不大。所以第二种可能性就是没加载完就添加监听导致失败。但是如何添加schedulenonce这样的延时,体验就会变差,也就是一出来就会等N秒,才会进行动作

每个骨骼加载完成后开始监听各自的事件,开始播放

之前是遇到用shared_cache模式会吞掉注册的事件用realtime就不会,然后你为什么是代码里面修改模式的,建议在预制体上面修改模式,你单独开个测试项目,把他们都改成realtime然后丢上去注册事件试一试

我的这个骨骼管理 类没有通过预制来做,直接在NODE上用this.addComponent(dragonBones.ArmatureDisplay)来创建的骨骼,然后动画加载资源,不论我的添加监听是在资源加载前还是加载完后都容易失效(看起来就像你说的丢失了事件监听),排查了所有相关代码,也没找到什么静态变量和PUBLIC这样的变量,都是私有变量,也就不会有被 覆盖监听的可能性

看一下创建方面的代码

this.skeJsonUrl = skeJsonUrl;

    this.texJsonUrl = texJsonUrl;

    this.pngUrl = pngUrl;

    this.armatureName = armatureName;

    this.ani = this.addComponent(dragonBones.ArmatureDisplay);

    this.ani.setAnimationCacheMode(dragonBones.ArmatureDisplay.AnimationCacheMode.REALTIME)

cc.loader.loadRes(this.skeJsonUrl, dragonBones.DragonBonesAsset, (err, res) => {

        if (err) cc.error(err);

        this.ani.dragonAsset = res;

        cc.loader.loadRes(this.texJsonUrl, dragonBones.DragonBonesAtlasAsset, this.onComplete.bind(this));

    });

    this.ani.addEventListener(dragonBones.EventObject.COMPLETE, (e) => {

        console.log("88888888888888888888888")

    }, this);

你试下把事件监听放到loadres最后的回调里面,就是this.onComplete里面

也试过,各种位置 都试过 :face_with_hand_over_mouth:

那我建议你弄个demo出来呼叫引擎组的人看一下

实在不行,我只有单独提取出来试下了,还是感谢你