我只想监听每个动画的complete事件,以前cocos2dx-lua是有的,现在每次弄个新动画就要在最后一帧加一个帧事件还要添加组件,麻烦死了
现在的设计就是这个样子的。
因为动画组件是复用的,在动画组件上加事件的话,不管是运行了什么动画,都会触发回调,所以事件就做在了clip动画数据上。
这样子添加的时候是更麻烦了点,但是回调的时候就比直接监听的时候更简单了,不需要判断是不是要回调的动画在播放。只需要专注的处理游戏逻辑~~代码会比较简单
那也可以做在代码里啊,貌似不冲突吧,不然做几百个动画其中一个忘记手动加事件光找bug就麻烦死了
如果是动画编辑器创建的动画剪辑
var animtion = this.node.getComponent(cc.Animation)
var animState = animation.getAnimationState(“动画剪辑名称”);
animState.clip.events.push({frame:0.3, func: “completeCallback”, params: []});
就可以给你的动画剪辑添加事件了
需要注意的是,frame的值为 animState.frameRate / animState.clip.sample(这里是把事件添加到最后一帧,如果需要添加到特定帧的话,就是 特定的帧 / animState.clip.sample )
func的值是字符串,就是事件回调的名称
params是一个数组,里面放事件回调的参数
如果是脚本里通过cc.createWithSpriteFrame创建的动画剪辑
创建剪辑
var clip = cc.createWithSpriteFrame(frames,sample);
添加事件
clip.events.push({frame:0.3, func: “completeCallback”, params: []})
这样就可以了
这个给力,谢谢,不过不能做成API吗,这个是根据源码写的吧,弄个接口出来多好,比如可以每个clip可以监听COMPLETE事件
还有个大问题,就是回调函数必须是动画节点里的某个组件里的一个函数吧,如果我用代码添加事件,是不是必须还得添加一个组件进这个动画节点,有没有办法直接设置某个回调函数但不一定需要添加新的脚本到那个动画节点上
这个问题我也不知道哦,只有问问官方的大神,我也觉得这样不方便,有事件回调还必须弄个脚本挂载到动画节点上
弄成button那样的多好啊
这个需要给官方的大神说一下
好的 3Q~