关于动态创建animationClip并添加事件的问题

如果我在函数a里创建clip,并在a里添加事件

a: function () {
      cc.loader.loadRes("atlas", cc.SpriteAtlas, function (err , atlas) {
              var frames = [];
              for(let i = 0; i < 10; i++){
                    frames.push(atlas.getSpriteFrame(frameName + i));
              }

              var clip = cc.AnimaitonClip.createWithSpriteFrames(frames, 10);
              clip.events.push({frame: 0.1, func: "callback", params: []})
              anim.addClip(clip);
       })
} 

这样帧回调事件就会被触发,但是如果我在b函数添加事件

a: function () {
      cc.loader.loadRes("atlas", cc.SpriteAtlas, function (err , atlas) {
              var frames = [];
              for(let i = 0; i < 10; i++){
                    frames.push(atlas.getSpriteFrame(frameName + i));
              }

              var clip = cc.AnimaitonClip.createWithSpriteFrames(frames, 10);
              anim.addClip(clip);
       })
} 


b : fucntion () {
      var animState = anim.getAnimationState(clipName);
      animState.clip.events.push({frame: 0.1, func: "callback", params: []})
}

这样事件就不会被触发,这是为什么呢?有没有什么解决办法啊?

跪谢各位大神

必须在 AnimationState 解析 clip 数据之前对 clip 的修改才会生效,
b 函数里获取 AnimationState 时已经对 clip 解析过了,所以再对 clip 的修改不会生效。

获取 AnimationState, 播放之类的操作都会使 AnimationState 解析 clip,所以需要在操作前对 clip 修改

:watermelon: 感谢大神

如果我不获取animationState就无法获得clip啊,因为clip通过anim.addClip的操作之后,clip的_name属性就变成空的,只有用anim.getAnimationState才能通过name获取到animationState,进而获取到相应的clip,或者我必须用一个数组来保存所有clip?

其实我的目的很简单,就是动画播放完成后回到原始帧,我现在的办法就是播放时通过判断repeatCount来决定是否添加事件,而事件回调就是用来把执行animation的节点上的sprite组件设置为播放animation之前的spriteFrame,官方能把这个小东西加上吗?:hushed:

animation.getClips 可以获取所有 clip

AnimationState 也是通过 clip.name 获取名字的啊

:watermelon:感谢大神,昨天我测试的时候发现clip.name是空的,但是今天测试是正常的,可能是我昨天太粗心哪里搞错了:joy:

感谢感谢

感谢回复:grin:

:joy: 还没试过这个 回头我也试一下

因为我的项目里帧动画比较多,起码有两三百个clip,如果用动画编辑器,那酸爽,不敢想象:joy:

HI,群主,你后面怎么处理的,我也要加类式百个左右的帧动画,我怎加var clip = cc.AnimaitonClip.createWithSpriteFrames(frames, 11);都 报错了?

报啥错啊?把错误贴上来看看,还有弄个demo贴上来看看

clip.events.push({frame: 0.1, func: “callback”, params: []}) 是怎么触发的 我这边实在不懂麻烦楼主说说

不懂?哪里不懂?你要说清楚啊,是有什么问题?还是单纯的不懂?:joy:

我本想用纯粹的代码写的但好像用代码写的不支持这样添加事件,一定要用在ui上“添加用户脚本组件”才能实现。不知道真只能这样还是说我用法不对。我现在就是在ui上“添加用户脚本组件”才能实现。