2013-04-04 59 views
1

他們似乎都得到自動釋放我創建它們= S是否可以創建* CCAnimation對象的std :: map?

void SceneView::createAnimation(KillerRabbit* killerRabbit, std::string animation) { 
    CCArray* animFrames = CCArray::createWithCapacity(15); 
    int first = std::stoi(killerRabbit->spriteSheetMap[animation]["FIRST"]); 
    int last = std::stoi(killerRabbit->spriteSheetMap[animation]["LAST"]); 
    char str[100] = {0}; 
    for (int i = first; i <= last; i++) { 
     // Obtain frames by alias name 
     sprintf(str, (killerRabbit->spriteSheetMap[animation]["KEY"]+"[%d].png").c_str(), i); 
     CCSpriteFrame* frame = sharedSpriteFrameCache->spriteFrameByName(str); 
     animFrames->addObject(frame); 
    } 

    spriteAnimationsMap[killerRabbit->spriteName][animation] = CCAnimation::createWithSpriteFrames(animFrames, 0.1f); 
    // 14 frames * 1sec = 14 seconds 
    rabbitSprites[killerRabbit->spriteName][animation]-> 
    runAction(CCRepeatForever::create(CCAnimate::create(spriteAnimationsMap[killerRabbit->spriteName][animation]))); 
} 

如果我忽略了這部分代碼的時刻:

rabbitSprites[killerRabbit->spriteName][animation]-> 
runAction(CCRepeatForever::create(CCAnimate::create(spriteAnimationsMap[killerRabbit->spriteName][animation]))); 

並嘗試訪問該對象:

spriteAnimationsMap[killerRabbit->spriteName][animation] 

在另一個方法的代碼後面的部分,該地圖內的對象將被自動釋放,我如何保留它,以便我可以使用不同的動畫存儲在以後的時間?

+1

的KillerRabbit回來:) – 2013-04-04 20:49:47

+0

這兔子是不是致命的,因爲我希望它可能是尚未=( – Hobbyist 2013-04-04 20:50:39

+0

你怎麼知道它已被釋放?爲什麼'runAction'代碼行改變? – 2013-04-04 20:52:29

回答

1

哦,我傻,我不得不這樣做:

spriteAnimationsMap[killerRabbit->spriteName][animation]->retain(); 
相關問題