这个问题在综合讨论区提过一次,但是多名开发者表示没有合适的解决方案。由于这个问题和Cocos Studio联系比较紧密,在这里提一遍,希望能得到关注。
本人用的是cocos2d-x 3.0版本。在Armature对象播放完动画时,有时候会有残影留下(反复播放动画的话残影会很明显)。
一方面为了消除残影,另一方面为了释放资源,在动画播放完时应当remove掉Armature对象。我的思路是当动画播放完成,回调MovementEventCallback,这个时候调用Armature对象的removeFromParent,但是会发生崩溃,崩在了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<void(Armature*, MovementEventType, const std::string&)> armatureFun = =](Armature* armature, MovementEventType type, const std::string& id)
{
if (type == MovementEventType::COMPLETE)
{
armature->getAnimation()->stop(); //这句有没有都会崩
armature->removeFromParent(); //调用这句导致崩溃
}
};
armature->getAnimation()->setMovementEventCallFunc(armatureFun);
}