关于动画播放完后,停在最后一帧的问题

问题描述:

使用缓冲池,在播放完动画后,回收节点,再次取出节点的时候,动画还停在最后一帧,不知道如何解决?

下面是核心代码:

// 播放动画,完毕后回收节点
const animate = this.getComponent(cc.Animation)
animate.play('enenmy3');
animate.on('finished',  function () {
         this.player.score.string = parseInt(this.player.score.string) + this.score
	// animate.removeClip(animate.getClips()[0],true)
	// this.node.removeComponent(animate)
	// 回收节点
	this.removeNode(this.node)
 }, this);

// 取出节点后,节点还停在动画的最后一帧
this._poolEnemy3 = new cc.NodePool();
let monster
monster = this['_poolEnemy' + name].get();

问题描述:

上面使用animate.removeClip(animate.getClips()[0],true)this.node.removeComponent(animate),都没用,想知道,在动画onFinished之后,做什么操作,能让精灵回到播放前的状态,求大神指点,如何解决?

复制第一帧放到最后啊

嗯,还有别的法子吗?这样感觉会多一帧

一般使用对象池最好进行初始化,重置初始状态,在对象使用过程中改变的数据都要重置

是呀,重置的花,别的变量我可以重置,但是像动画这种,不知道咋重置啊,一直在最后一帧,不知道怎么去掉

https://docs.cocos.com/creator/manual/zh/animation/scripting-animation.html
官方文档对于animation组件的介绍很详细啊,你可以在最后一帧的回调函数去重置

直接使用node.getComponent(cc.Animation).play(“动画名”,0)就可以了。

play方法其实可以传2个参数,第2个参数是从第几帧开始播放。

或者在回首时,把动画手动设置到第一帧。API上有这个方法啊。

你们呐,首先play第二个参数并不是帧数,是时间,第二,你理解错楼主的意思了,并不是从哪一帧开始播放,而是放完了回初始状态

播放动画会返回一个animationState,2.0以后用下面的方法可以回到第一帧

animationState.time = 0;
animationState.sample();
1赞

上面说了那么多, 说个简单的 最后一帧放透明图

真鸡贼

哈哈,对的,不过他们的法子可行

好的,回到第一帧也行