关羽cocostudio生成动画,无法释放的问题

请教一个问题,像这样添加的 例子效果或者动画应该怎么释放内存呢?
额,好像添加的动画都不能被释放,试了好多办法,removeChild 或者 removeParent 都会报错哦。。。
我就直接拿论坛教程当例子了。

//加载数据

CCArmatureDataManager ::sharedArmatureDataManager()->addArmatureFileInfo( “hero/Hero.ExportJson”); //创建英雄对象

CCArmature * armature = CCArmature ::create( “Hero”);

//播放attack动画 armature->getAnimation()->play( “attack” );

            armature->setScale(1.5);                armature->setPosition( ccp (visibleSize.width*0.25, visibleSize.height*0.25));  //添加到父节点                addChild(armature); return true ;

这里创建并播放了 hero中attack的动画,请教下如何在播放完成时删除 释放该动画对象呢?确切地说如何释放 ccarmature

api中有个 setMovementEventCallFunc…的一个方法是监听 播放状态的,我在COMPLETE状态的时候从舞台移除 ccarmature对象,就报错了,请教如何在动画播放完毕移除,释放该对象

您好,请问您是如何操作的呢?

您好 我给您粘下我这边的详细代码

//#######################以下代码 是创建动画对象和操作的部分#################
Armature * armature = Armature::create(“TestAnimation”);
armature->setTag(++i);
//获取衔接中的动画元素,并且添加动作事件监听
ArmatureAnimation animation = armature->getAnimation();
animation->setMovementEventCallFunc(this, SEL_MovementEventCallFunc(&HelloWorld::animationCallBack));
//animation->setFrameEventCallFunc(this, SEL_FrameEventCallFunc(&HelloWorld::animationCallBack));
auto test = animation->getAnimationData();
//添加到父节点
addChild(armature);
CCLog("%x", armature);
//播放动画中的myParticle 动作节点
animation->playByIndex(0, -1, 0);
//armature->setScale(1.5);
armature->setPosition(ccp(visibleSize.width
0.25, visibleSize.height*0.25));

//#####################以下是我通过 setMovementEventCallFunc 监听的动画播放完毕
//在if (movementType == COMPLETE)中的注释掉的那些代码,我都尝试过了,都不能正常删除,删除后大概间隔个0.xx总之很短的时间会报一个错(错误在最下边)
void HelloWorld::animationCallBack(Armature *armature, MovementEventType movementType, const std::string& movementID){
CCLog(“run…~~~ %d”, movementType);

if (movementType == COMPLETE){
    //armature->getAnimation()->setMovementEventCallFunc(NULL, NULL);
    //CCLog("run....~~~");
    //armature->getAnimation()->gotoAndPause(15);
    //
    //armature->stopAllActions();
    //armature->unscheduleAllSelectors();
    //armature->unscheduleUpdate();
    //removeChild(armature);//这里移除后会报错
    //armature->release();
    //armature->autorelease();
}

}

报错信息截图在附件,我感觉好像是这个动画对象没有在全局的update回调中移除,我remove以后这个类因为是new出来的 里边做了 autorelease处理,所以自己释放掉了,然后 全局的update回调引用没有删除,所以引起错误了,我是新手不知道是不是这样,求助

我的创建方法与你相同,但是使用removeFromParentAndCleanup(true);是没问题的。我是在testcpp的ArmatureScene.cpp里测试的。

:6:版主老大快去搞定3.0,不然不能一起玩耍啦!

思密达~~~~~~~~~~~~~·

我也碰到同样的问题,和回调有关,在回调里删除自己就会完蛋,估计回调方法后还有其他代码调用到这个指针,释放了,后边就爆了,如果把removechild动作放到外边去,不会报错

我也遇到这个问题了

好的,谢谢反馈,这个我们今天再查证一下。

你好,目前来看,是Cocos2d-x底层做了改动,原先的做法是先标记,下一帧才会删除,目前引擎本身做了调整,我们需要重新调整这个策略。目前该问题正在由开发工程师解决中。解决后将会恢复各位解决办法。

cocos2dx 3.1 正式版中依旧有这个问题。

就是,这个问题多久修复啊,现在太不方便 了。

在回调里删除自己就会报错。

我现在加一个延时 this->scheduleOnce(schedule_selector(), 0.01f);来删除,感觉多麻烦又不合理。

这个问题解决了么 ?