iPhone游戲開發(fā) Cocos2d加載圖片方式實(shí)例操作
iPhone游戲開發(fā) Cocos2d加載圖片方式實(shí)例操作是本文要介紹的內(nèi)容,分享一個(gè)我用cocos2d加載圖片的方式,其實(shí)很簡(jiǎn)單,我覺得還挺實(shí)用的,來看詳細(xì)內(nèi)容。
首先要提醒一點(diǎn),ihpone開發(fā)中所有的圖片最好都是png格式的,雖然png格式的圖片比jpg或其他的圖片要大,但是png的圖片在sdk中是做過優(yōu)化處理的,是蘋果推薦的格式,對(duì)這個(gè)格式支持也是相對(duì)好的.尤其是在最新4.2的sdk中,如果你有jpg的圖片,并且比較大,在真機(jī)上是現(xiàn)實(shí)不出來的.
最開始做項(xiàng)目,對(duì)cocos2d了解的比較少,添加一個(gè)CCSprite時(shí),為了簡(jiǎn)單,就直接用
Java代碼
- CCSprite *sprite = [CCSprite spriteWithFile:@"圖片名稱"];
CCSprite *sprite = [CCSprite spriteWithFile:@"圖片名稱"]; 如果你是這樣用,那就是說圖片要通過自動(dòng)釋放機(jī)制來完成對(duì)加載圖片的釋放了,那究竟什么時(shí)候圖片會(huì)自動(dòng)釋放掉呢?當(dāng)然是程序內(nèi)存快要用盡的時(shí)候
Java代碼
- - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
- [[CCTextureCache sharedTextureCache] removeUnusedTextures];
- }
- - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
- [[CCTextureCache sharedTextureCache] removeUnusedTextures];
- }
看你應(yīng)用的delegate方法,會(huì)有上面一個(gè)函數(shù),這個(gè)函數(shù)就是用來觸發(fā)什么釋放圖片的.內(nèi)存快要到達(dá)極限的時(shí)候會(huì)發(fā)出警告告訴上邊的方面,然后這個(gè)方法就會(huì)從cache中釋放掉當(dāng)前不用的圖片,
removeUnusedTextures進(jìn)到這個(gè)里面會(huì)看到實(shí)際上就是釋放掉retaincount=1的資源.通過log會(huì)發(fā)現(xiàn)內(nèi)存警告是分級(jí)別的,
當(dāng)時(shí)1級(jí)的時(shí)候問題不大,2級(jí)的時(shí)候就危險(xiǎn)了,超過2級(jí)程序就完蛋了.而在調(diào)用內(nèi)存警告之前,通過xcode提供內(nèi)存跟蹤工具,會(huì)發(fā)現(xiàn)圖片一直會(huì)占著內(nèi)存.
所以就不要依賴自動(dòng)釋放了,會(huì)害了項(xiàng)目的,尤其做游戲,圖片比較多,如果用這種方式加載素材,到后期就慘了.我是深有體會(huì).
我是這樣做的
Java代碼
- CCTexture2D * backBGTexture = [[CCTextureCache sharedTextureCache] addImage:@"a_aboutBG.png"];
- CCSprite * backgroundSprite = [[CCSprite alloc] initWithTexture:m_backBGTexture];
- [self addChild:backgroundSprite];
- [backgroundSprite release];
- CCTexture2D * backBGTexture = [[CCTextureCache sharedTextureCache] addImage:@"a_aboutBG.png"];
- CCSprite * backgroundSprite = [[CCSprite alloc] initWithTexture:m_backBGTexture];
- [self addChild:backgroundSprite];
- [backgroundSprite release];
其實(shí)就是手動(dòng)構(gòu)建CCsprite這樣,在圖片不用的時(shí)候(一般在dealloc方法中),直接把圖片remove掉
Java代碼
- -(void)dealloc
- {
- [[CCTextureCache sharedTextureCache] removeTexture:backBGTexture];
- [super dealloc];
- }
小結(jié):iPhone游戲開發(fā) Cocos2d加載圖片方式實(shí)例操作的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!