Cocos2d加載圖片的方式


http://wangzy-boy.iteye.com/blog/907141

分享一個我用cocos2d加載圖片的方式,其實很簡單,我覺得還挺實用的

首先要提醒一點,ihpone開發中所有的圖片最好都是png格式的,雖然png格式的圖片比jpg或其他的圖片要大,但是png的圖片在sdk中是做過優化處理的,是蘋果推薦的格式,對這個格式支持也是相對好的.尤其是在最新4.2sdk,如果你有jpg的圖片,並且比較大,在真機上是現實不出來的.

 

最開始做項目,cocos2d了解的比較少,添加一個CCSprite,為了簡單,就直接用

CCSprite *sprite = [CCSprite spriteWithFile:@"圖片名稱"];

如果你是這樣用,那就是說圖片要通過自動釋放機制來完成對加載圖片的釋放了,那究竟什么時候圖片會自動釋放掉呢?當然是程序內存快要用盡的時候

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
}

 

看你應用的delegate方法,會有上面一個函數,這個函數就是用來觸發什么釋放圖片的.內存快要到達極限的時候會發出警告告訴上邊的方面,然后這個方法就會從cache中釋放掉當前不用的圖片,

 

removeUnusedTextures進到這個里面會看到實際上就是釋放掉retaincount=1的資源.通過log會發現內存警告是分級別的,

 

當時1級的時候問題不大,2級的時候就危險了,超過2級程序就完蛋了.而在調用內存警告之前,通過xcode提供內存跟蹤工具,會發現圖片一直會占着內存.

 

 

 

所以就不要依賴自動釋放了,會害了項目的,尤其做游戲,圖片比較多,如果用這種方式加載素材,到后期就慘了.我是深有體會.

 

 

 

我是這樣做的

 

 

CCTexture2D * backBGTexture = [[CCTextureCache sharedTextureCache] addImage:@"a_aboutBG.png"]; 
CCSprite * backgroundSprite = [[CCSprite alloc] initWithTexture:m_backBGTexture];
[self addChild:backgroundSprite];
[backgroundSprite release];

其實就是手動構建CCsprite這樣,在圖片不用的時候(一般在dealloc方法中),直接把圖片remove掉

-(void)dealloc 
{
[[CCTextureCache sharedTextureCache] removeTexture:backBGTexture];
[super dealloc];
}

 

再通過內存跟蹤工具會發現,內存當即被釋放掉了.這樣場景間切換的時候,就可以把上一個場景的圖片全部釋放掉.

 

我就是這樣做的.呵呵.

 

 

 

 

    

 

    CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];

 

     [frameCache addSpriteFramesWithFile:@"advShelfUpLevel.plist"];

 

    

 

    CCSpriteFrame *frame  = [frameCache spriteFrameByName:@"bomb_effect_13_15.png"];

 

    CCSprite *sp = [CCSprite spriteWithSpriteFrame:frame];

 

    CCTexture2D *tex = [[CCTextureCache sharedTextureCache] addImage:<#(NSString *)#>]

釋放:

 

    [[CCTextureCache sharedTextureCache] removeTexture:tex];

 

     [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromTexture:tex];

 

   //[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:<#(NSString *)#>];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM