如题所问,我在一个节点播放完动画后,如何让这个节点显示原有的Sprite呢?而不是动画的最后一帧。
Up Up 在线等
2种方式
- 动画完成回调,在回调中修改sprite
https://docs.cocos.com/creator/manual/zh/animation/scripting-animation.html#注册动画回调 - 动画的最后一帧就是你的原有sprite
我得节点上的Sprite是一个完好的飞机,动画的最后一帧是爆炸。。。
并且我得动画没有循环
onCollisionEnter: function (other, self) { if(self.group = "emeny"){ self.enabled = false; self.node.getComponent(cc.Animation).play(); self.node.getComponent(cc.Animation).on('stop', function(){ this.node.removeFromParent(); self.node.Pool.enemyDes(this.node); }, this); } },
这个是关键的代码。在碰撞的时候取消碰撞。然后播放此节点上面的动画。当动画结束后将其放回到对象池中。但是问题就在于放回对象池后再次取出时,这个节点仍然显示动画的最后的最后一帧,我想让他显示原有的Sprite。
1 不应该监听stop 而是finish
2 可以将节点的active=false后放入对象池,然后取出使用时进行初始化,比如重置sprite,初始化完成后active=true
关键这个重置sprite应该咋写合适啊大神。。
把原来的飞机图存为一个spriteFrame挂载在脚本中,例如为source_spf,然后初始化的时候
node.getComponent(cc.Sprite).spriteFrame = this.source_spf
看你的代码碰撞逻辑写在飞机脚本上,所以这个spriteFrame也应该挂载飞机脚本下
补充:
也可以将spriteFrame挂在一个单例脚本下,例如GamePlay(逻辑上不应该在Gameplay下,只是举个例子);然后:
node.getComponent(cc.Sprite).spriteFrame = GamePlay.instance.source_spf
谢谢! 这样确实可以。太感谢您了
思路很实用。谢谢!