怎么获取animationClip的实际帧数?

如题,animationClip的sample属性只是采样的帧数,不是实际帧数,如果我的采样是20帧每秒,但是我的动画只有10帧,播放完成就只需要0.5秒,但是问题来了

我用的动态创建,不是动画编辑器,并且我是先创建clip并保存到animation,然后 特定条件下 通过clip.events.push添加帧事件,我想在动画的最后一帧,就是第10帧添加事件怎么办?

刚刚看来看上面这个属性,也是获取采样的,不是实际帧数

帧事件需要一个帧时间做参数,难道我的clip创建好了需要用变量保存实际帧数?然后添加事件的时候再取出来?

请教各位大神:watermelon:

要不你先创建出来帧事件 在特定条件下再触发是不是比较好···?

问题是帧事件是在播放到设定的帧就触发啊,不需要我手动触发,我现在的想法只在特定条件下添加帧事件

或者你说的是创建clip的时候就把帧事件添加进去,然后触发帧事件的时候在我的回调函数里判断要不要触发我自定义的操作?

嗯嗯 是这个意思 触发之后用变量控制是否执行里面的函数 我之前是这么做的·····

:joy:主要是我觉得这样比较耗内存,因为我一次有100多个clip,每个clip都创建会占用不必要的内存,虽然没有多少,不过我这个人有很严重的强迫症:joy:

感谢回复,我试试看有没有其他办法,如果不行的话,就只有照你说的办法了,或者我把每个clip的帧数都保存在一个数组里:watermelon::watermelon:

    var animation = this.node.getComponent(cc.Animation);
    // frames 这是一个 SpriteFrame 的数组.
    var clip = cc.AnimationClip.createWidthSpriteFrame(frames, 17);
    clip.name = "anim_run";
    clip.warpMode = cc.WarpMode.Loop;
    // 添加帧事件
    clip.events.push({
        frame: 1,
        func: "frameEvent",
        params: [1, "hello"]
    });
    animation.addClip(clip);
    animation.play('anim_run');

其中 frame 这个参数要指定的是经过采样计算后的时间,按你的需求来说,第10帧,sample 是20,那么 frame = 10/20

这部分文档会随着 1.1.2 正式发布更新

男神,我只是打个比方,因为每个clip的帧数不一样,有5帧的,有7帧的,有其17帧的,但是采样是统一的17帧,我就是想获取帧数然后除以采样,就可以在最后一帧添加事件,但是不是所有clip都需要添加帧事件,所以我想在需要添加帧事件的时候,再获取实际帧数,然后添加事件,或者是animation播放完成有回调函数也可以:grin:

如果是直接传1的话,帧事件会在第二十帧触发,但是我的动画在第十帧就已经播放完了