— Begin quote from ____
关于内存不释放。官方已经给出解决方案
特此感谢hanrea 和2youyouo2
解决办法:
cocos2d-x / extensions / CocoStudio / Armature / utils / CCDataReaderHelper.cpp
384行 加一行:标红内容
else
if(str.compare(".json")
==0
||str.compare(".ExportJson")
==0)
{
CCDataReaderHelper
::addDataFromJsonCache(load_str.c_str(),
&dataInfo);
}
CC_SAFE_DELETE_ARRAY(pBytes);
}
如果找不到pBytes。请看368行
unsigned
char
*pBytes
= CCFileUtils
::sharedFileUtils()
->getFileData(fullPath.c_str() , “r”,
&size);;
声明的什么就写什么。
— End quote
亲爱的版主。官方工作人员。
我公司正在用cocostudio做骨骼动画。
游戏内有大量动画。但是我们发现运行几次就会崩溃。
最后找到问题。释放内存不全面。 导致运行越久内存越大。直到崩溃。
还有个问题就是异步调用。释放内存无效。内存一点都没减少。
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
aaa+=1;
if(aaa== 1){
test = CCSprite::create(“senlin.png”); //加载森林图片 监控内存变化
test->setPosition(ccp(0,0));
this->addChild(test);
}else if (aaa== 2) {
test->removeFromParent();
CCTextureCache::sharedTextureCache()->removeAllTextures(); //移出森林图片。 内存恢复原大小
}else if(aaa== 3){
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo(“Armature/arm_10/100.png”,“Armature/arm_10/100.plist”,“Armature/arm_10/10.ExportJson”);//加载骨骼动画文件 检查内存变化。
armature = CCArmature::create(“10”);
armature->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(HelloWorld::Huidiao));
armature->setPosition(ccp(0,150));
this->addChild(armature,5);
armature->getAnimation()->play(“load”);
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("Armature/arm_217/2170.png","Armature/arm_217/2170.plist","Armature/arm_217/217.ExportJson");//加载骨骼动画文件
armature2 = CCArmature::create("217");
armature2->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(HelloWorld::Huidiao2));
armature2->setPosition(ccp(150,150));
this->addChild(armature2,5);
armature2->getAnimation()->play("load");
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("Armature/arm_235/2350.png","Armature/arm_235/2350.plist","Armature/arm_235/235.ExportJson");//加载骨骼动画文件
armature3 = CCArmature::create("235");
armature3->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(HelloWorld::Huidiao3));
armature3->setPosition(ccp(300,150));
this->addChild(armature3,5);
armature3->getAnimation()->play("load");
}else if(aaa== 4){
armature2->getAnimation()->play("atk");
}else if(aaa==5){
armature->getAnimation()->play("atk");
}else{
armature3->getAnimation()->play("atk");
}
}
void HelloWorld::Huidiao(cocos2d::extension::CCArmature *armature, cocos2d::extension::MovementEventType type, const char *str){ //移出动画 发现内存没有回原大小。 3个都移出后 内存比原大小增加了0.7MB左右
if(type == COMPLETE){
armature->removeFromParent();
//armature->removeFromParentAndCleanup(true);
CCArmatureDataManager::sharedArmatureDataManager()->removeArmatureFileInfo(“Armature/arm_10/10.ExportJson”);
CCTextureCache::sharedTextureCache()->removeAllTextures();
}
}
void HelloWorld::Huidiao2(cocos2d::extension::CCArmature *armature, cocos2d::extension::MovementEventType type, const char *str){
if(type == COMPLETE){
armature->removeFromParent();
//armature->removeFromParentAndCleanup(true);
CCArmatureDataManager::sharedArmatureDataManager()->removeArmatureFileInfo(“Armature/arm_217/217.ExportJson”);
CCTextureCache::sharedTextureCache()->removeAllTextures();
}
}
void HelloWorld::Huidiao3(cocos2d::extension::CCArmature *armature, cocos2d::extension::MovementEventType type, const char *str){
if(type == COMPLETE){
armature->removeFromParent();
//armature->removeFromParentAndCleanup(true);
CCArmatureDataManager::sharedArmatureDataManager()->removeArmatureFileInfo(“Armature/arm_235/235.ExportJson”);
CCTextureCache::sharedTextureCache()->removeAllTextures();
}
}
