2011-10-31 249 views
0

我正在使用CCScrollLayer。並且我正試圖在級別開始之前的階段選擇屏幕上準備一個關卡的紋理。 因此,當我改變關卡時,我製作了這個屏幕,然後在準備好關卡的紋理之前應該將其移除。但我不認爲「removeSpriteFramesFromFile」方法很好。因爲當我滾動幾層時,它會突然調用「內存警告」,並在那麼晚的時候刪除那些紋理,然後我就預料到了。removeSpriteFramesFromFile似乎不起作用

-(void) prepareTexture:(NSNumber*)number 
{ 
    int _page = [number intValue]; 

    if(loadingTexNum != 0 && (_page + 1) != loadingTexNum) 
    { 
     [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]]; 
     loadingTexNum = _page + 1; 
     [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]]; 
    } 

    if(loadingTexNum == 0 && (_page + 1) != loadingTexNum) 
    { 
     loadingTexNum = _page + 1; 
     [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]]; 
    } 
} 

感謝

+0

這是第一個'如果'肯定叫? –

+0

肯定是:) –

回答

2

我相信你誤解是什麼方法做:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"file.plist"]; 

它加載在plist中的精靈幀,然後刪除從緩存中plist中CCSpriteFrame對象 - 如果他們被緩存。它不會刪除紋理,只會刪除CCSpriteFrame對象!

要從你需要調用緩存中刪除紋理:

[[CCTextureCache sharedTextureCache] removeTexture:tex]; 

你應該知道,一個CCSpriteFrame對象是重量相對較輕的對象消耗的內存最多64個字節。與甚至是具有16位顏色深度的非常小的32x32紋理(使用2048字節內存)相比,這並不算什麼。

+0

謝謝你的幫助。好的,我查看了cocos2d的代碼。你是對的。 「CCTexture2D * texture = [[CCTextureCache sharedTextureCache] addImage:texturePath];」在addSpriteFramesWithFile方法中調用。那麼我應該弄清楚如何去除我想要去除的特定紋理。謝謝 –