本人用的是cocos2d-x 3.0版本。在Armature对象播放完动画时,有时候会有残影留下(反复播放动画的话残影会很明显)。一方面为了消除残影,另一方面为了释放资源,在动画播放完时应当remove掉armature对象。我的思路是当动画播放完成,回调MovementEventCallback,这个时候调用armature对象的removeFromParent(之前控件runAction也是用类似的方式,在runAction最后的回调中调用removeFromParent,是ok的),却会发生崩溃,崩在了armature的update方法里面。我想可能是Armature的生命周期我没有搞清楚,可是我查了一些资料也没找到其他的解决方案。不知道哪位大神有高见。代码如下:
void playAnimation(Node* node)
{
float speed = 2.0f;
Armature *armature = Armature::create("anim");
armature->getAnimation()->setSpeedScale(speed);
armature->getAnimation()->playWithIndex(0, -1, 0);
node->addChild(armature);
armature->setPosition(Point(0, 0));
std::function armatureFun = =](Armature* armature, MovementEventType type, const std::string& id)
{
if (type == MovementEventType::COMPLETE)
{
armature->getAnimation()->stop(); //这句有没有都会崩
armature->removeFromParent(); //调用这句导致崩溃
}
};
armature->getAnimation()->setMovementEventCallFunc(armatureFun);
}
```