2012-01-30 44 views
0

我使用CCSpriteFrameCache很多,但不能理解它的一些東西。 我可以在遊戲開始時將很多.plist加載到緩存中嗎?或CCSpriteFrameCache一次只有一個plist多次CCSpritevFramevCache在同一時間

現在有一個精靈,它是一個CCSpriteBatchNode的孩子,它在遊戲過程中被多次創建,圖像不同。所以每次我創建一個新的精靈,我這樣做:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"cand%i.plist",stage]]; 
    candySheet = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"cand%i.png",stage]]; 
[self addChild:candySheet]; 
sprite1 = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"cand%i.png",1]]; 

它可以嗎?

現在我們可以說我有2個spriteSheets和2個.plist,並且我想在我的init中加載它們兩個,並添加2個精靈,每個精靈都是一個子對象CCSpriteBatchNode,併爲他的每個精靈渲染圖像自己的spriteSheet和Plist。但我得到的錯誤那麼:

CCSprite is not using the same texture id 

所以,我明白,每次我要加載到緩存中,我需要在特定時間的plist ????

謝謝。

回答

1

有人問過類似的事情。

如果不是來自同一個spritesheet,你不能製作同樣的CCSpriteBatchNode子元素。

您需要創建一個新的CCSpriteBatchNode每個spritesheet使用(由spritesheet我指的是合成圖像文件和文件的.plist)

的CCSpriteFrameCache是​​在所有場景和類共享一個緩存。當你調用這個方法:

[CCSpriteFrameCache sharedSpriteFrameCache]

你是不是做一個新的CCSpriteFrameCache對象每次,只有一個實例。您將所有加載的Sprites表單存儲在此單個緩存中。因此,您可以像下面這樣將2張spritesheet加載到緩存中:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@「sheet1.plist」]; [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@「sheet2.plist」];

然後你需要爲每個spritesheet一個CCSpriteBatchNode,你不能在一個批處理節點多張:

CCSpriteBatchNode * spriteSheet1 = [CCSpriteBatchNode batchNodeWithFile:@ 「sheet1.pvr.ccz」];

CCSpriteBatchNode * spriteSheet2 = [CCSpriteBatchNode batchNodeWithFile:@「sheet2.pvr.ccz」];

如果您願意,可以將這兩個批處理節點添加到圖層。添加到批處理節點的精靈必須來自批處理節點正在使用的精靈表。

+0

感謝您的回放,但是您寫下的所有信息我都已經知道了,這不是我的問題。我的問題是,如果每次我創建一個新的精靈,這是一個相同的spriteSheet的孩子,但每次他從該精靈表中呈現不同的圖像,所以我需要再次加載到緩存plist,或者我可以在init中做到這一點(你剛剛寫了什麼),並且緩存將繼續保存所有多個.plist文件,我將選擇我以後需要的東西? – Curnelious 2012-01-30 15:24:54

+0

答案確實表示緩存是單一存儲:「CCSpriteFrameCache是​​跨所有場景和類共享的單個緩存。」 「您將所有加載的spritesheet存儲在此單個緩存中。」所以不,你不需要再次加載它,你可以稍後使用它,緩存是你已經加載的內容的存儲區。當你創建一個精靈時,它只是使用緩存中的紋理,根本不會改變緩存。 – FBryant87 2012-01-30 16:11:35

0
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"some.plist"]; 

上面一行所花的時間相當塊甚至如果子畫面幀已經加載/緩存。所以一定要避免這樣做,除非你完全確定這些精靈幀之前沒有被緩存過,比如在遊戲開始時或者在清除精靈幀緩存之後。