2011-09-25 19 views
13

在Cocos2d我將播放動畫。動畫大約有12幀,每幀都比較大。實際上,每個幀的-hd版本是相當巨大的。何時使用CCSpriteBatchNode?

無論如何,首先,我通過使用Zwoptex將所有12幀放置到紋理中來創建它。紋理約爲2048x2048。

這樣我就可以使用該紋理在CCSpriteBatchNode中創建CCSprite動畫。

但我似乎得到了2級內存警告。

現在我想起來了,我不認爲CCSpriteBatchNode應該用於一個 sprite。我想這隻有在你想繪製大量使用相同紋理的精靈時纔有用。

所以我想知道:我應該動畫的幀精靈幀(沒有巨大的紋理)?或者有可能以不同的方式使用那種巨大的紋理?

回答

24

你說得對CCSpriteBatchNode。 CCSpriteBatchNode就像一個批處理節點:如果它包含子節點,它將在單個OpenGL調用中繪製它們(通常稱爲「批處理繪製」),如果沒有CCSpriteBatchNode(在這種情況下),將調用所有的「批處理繪製」儘可能多的孩子數量(精靈)。

CCSpriteBatchNode可以引用一個且只有一個紋理(一個圖像文件,一個紋理圖集),即由zwoptex創建的精靈圖紙。只有包含在該紋理中的CCSprites可以添加到CCSpriteBatchNode中。所有添加到CCSpriteBatchNode的CCSprites都在一個OpenGL ES繪圖調用中繪製。如果CCSprites沒有添加到CCSpriteBatchNode中,那麼每個CCSprites都需要一個OpenGL ES繪圖調用,效率較低。

根據您的場景,您不必使用CCSpriteBatchNode,因爲在任何給定時間只有一個紋理呈現。

所以我想知道:我應該動畫的幀(沒有巨大的紋理)的精靈幀?或者有可能以不同的方式使用那種巨大的紋理?

沒關係。無論如何,你將會加載2048 x 2048的紋理。需要思考的問題是爲什麼只有一個2048 x 2048紋理會給您提供2級警告?你加載了多少這樣的紋理。 BTW 2048 x 2048僅支持上面的iPod3G/iPhone3GS(這很好)。

如果你正在加載很多紋理(這對我來說似乎是真的)。您需要編寫一些邏輯,以便在不需要時可以卸載紋理。 請看看下面的方法:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

至於動畫而言,您可以創建CCAnimation並使用或(根據您的情況),您可以使用setDisplayFrame(CCSpriteFrame幀);

相關問題