之前的动画工程都是序列帧,一直都没问题。
今天把其中一个序列帧换成一个粒子了(粒子是用cocos particle做的一个非常简单的示例,该粒子直接在程序中使用都没问题),在项目中有大规模播放该动画(CCArmature)的时候,崩溃的几率很高。
我程序中是这样使用的:
1,添加播放动画:
CCArmature* armature = CCArmature::create(projectName);
armature->getAnimation()->play(animationName);
armature->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(HelloWorld::animationEvent));
2,删除动画:
然后在HelloWorld::animationEvent中:
void HelloWorld::animationEvent(CCArmature* armature, MovementEventType movementType, const char* movementID)
{
if (movementType == COMPLETE) {
armature->stopAllActions();
armature->removeFromParent(); //删除动画
}
}
3,崩溃的堆栈:

在上面的CCObject::release那里,可以查看到CCBone中的m_strName的值,就是我上面我说的替换成粒子的对象结构
4,如果在第2步中把armature->removeFromParent(); //删除动画去掉,那么程序就不会崩
这个问题看起来像是CCArmature在前面的删除了,但是后面不知为什么CCBone又会再删除一次,当removeFromParent的时候,parent其实已经被释放掉了,所以程序就崩了。该崩溃不是必现的,我在mac模拟器下不会出现,但是在iphone4上出现几率很高,在小米3上出现几率又非常小,win32下release不会出现,debug出现的几率非常搞。。。所以看起来,运行的速度貌似会影响到。。。
我上面这种在动画工程中使用粒子的方法是否有问题?已经尝试一个下午了,还没解决,求大神帮忙,非常感谢!
使用的版本是cocos2dx-2.2.3,cocostudio-1.4.0.1,particleEditor-1.0.0.1