cocos2d-js 3.5 cocostudio 2.2.5 动画回调

    var root = ccs.load(res.cloudOpen_json);
    root.node.setPosition(cc.p(cc.winSize.width/2,cc.winSize.height/2));
    this.addChild(root.node);
    root.node.runAction(root.action);
    root.action.gotoFrameAndPlay(0,root.action.endIndex,0,false);
    root.action.setFrameEventCallFunc(function(name){
        cc.log("aa");
    })

使用setFrameEventCallFunc接口没有反应,请问动画结束的回调要怎么写

自己顶下,坐等大神

期待有人来解答,为什么没有反应啊?

怎么没有人来回答啊?是版本不兼容吗?还是什么问题,求大神解答啊。。。。

api上是这样传参的:
setFrameEventCallFunc(callFunc, target)
Sets frame event callback to animation.
Parameters:
{function} callFunc
{Object} target

你少一个参数,也就是该函数作用的目标节点

使用你的方法报错如下:
JS: E:/ProjectTempData/CocosWorkspace/CocosStudioStudy//src/FrameAnimationScene.js:20:Error: js_cocos2dx_studio_ActionTimeline_setFrameEventCallFunc : wrong number of arguments: 2, was expecting 1

API应该只有一个参数,能给个帧动画的具体实现例子吗?

官方列子中有这个文件,你搜索下这个方法的用法
在js-tests->src->CocosStudioTest->ArmatureTest->ArmatureTest.js

你说的那个ArmatureTest方法,我看了,貌似它是指骨骼动画,不是帧动画吧?帧动画应该用的是ActionTimeLine.js中的方法吧?我的帧动画代码如下,一切都可以正常运行,
就是帧事件回调如何生效。如下:还请前辈细致指导啊。。
var FrameAnimationLayer = cc.Layer.extend({
runMan:null,
loop:null,
ctor:function(){
this._super();
/**
* 采用委婉的方法来进行帧动画的检测与操作,其中设置帧动画的事件监听失效。
*/
//加载frameAnimation界面的JSON资源分析,并获取frameAnimationScene对象。
frameAnimationScene = ccs.load(res.frame_animation_json).node;
// //将frameAnimationScene对象加入到layer中。
this.addChild(frameAnimationScene);
runManNode = frameAnimationScene.getChildByName(“ProjectNode_1”);
runManNode.runAction(cc.MoveBy.create(2, cc.p(300, 10)));

// this.scheduleUpdate();
//获取Node中的action
runMan = ccs.load(res.run_man_json).action;
frameAnimationScene.runAction(runMan);
//下面这句话没法生效。
runMan.setFrameEventCallFunc(this.frameAnimationEvent);
//运行动画,开始帧,结束帧,当前帧,是否循环。
runMan.gotoFrameAndPlay(0,20,true);

    return true;
},
update:function(){
    cc.log(runMan.isPlaying());
},
frameAnimationEvent:function(frame){
    cc.log("Frame Animation Event");
}

});

var FrameAnimationScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new FrameAnimationLayer();
this.addChild(layer);
}
});

帧事件回调失效,不知道如何改正,求指点。

我查了下它的API,这个action有一个方法isDone()来判断是否该动画播放结束,好像没有直接设置其回调的函数

确实是很难找,但是这个方法确实存在,如图所示,它正常工作的话应该是每一帧都会调用一次回调函数。但是,有方法却无法使用是怎么回事?难道要用一个ScheduleUpdate进行时刻检测,发现isDone之后,在进行相应处理?

是不是你设置了动画的循环播放,不停止的话是不会进到这里面的
runMan.gotoFrameAndPlay(0,20,true);

真的是麻烦你了,即使设置为false也是不行的。我不知道到底是什么原因。这里是我整个工程的百度云下载《
http://pan.baidu.com/s/1c0GqSRQ
你能下载下来,看看原因到底出现在哪里吗?主要是FrameAnimationScene.js中的代码,真的麻烦你了。
都搞了好几天了,就是无法回调啊。

而且这个方法不是每变化一帧 都会调用一次的吗?难道是Bug??

估计是cocos2d-js 3.5的一个坑,也有别人反应进不了回调,这边试了下,isDone()也没用,我也没办法了啊,还有一个办法就是判断isPlaying(),这个是有用的

真的是太感谢你了,既然是坑,那我就想别的办法解决吧。还有,我问一下,据你所知,哪个版本的这个方法可以用啊?最新的版本有没有解决这个问题啊?希望官网给个答复啊,
还有,再次感谢你,这个问题我都搞很多天了,不知道能不能加你好友,一起交流交流。能不能私信给我,你的QQ。

setFrameEventCallFunc() 是需要打关键帧才会回调的,如果只是最后一帧结束回调要用setLastFrameCallFunc()

设置关键帧的帧事件,最好是 开启 自动记录帧 功能来设置。:14:

root.action.gotoFrameAndPlay(0,root.action.endIndex,0,false);
root.action.setFrameEventCallFunc(function(name){
cc.log(“aa”);
})这2个调换个位置,要先设置回调,在播放动画,我也遇到这个问题,刚刚试出来。

我这样试了也不行