2011-12-23 45 views
0

我在cocos2d中提到了一件奇怪的事情。無法清理場景之間的緩存?

在我的init遊戲場景和菜單場景中,我將一個frameCache plist和一個spriteSheet加載到緩存中。

我發現,如果我在比賽現場dealloc方法我清理緩存,:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames]; 
    [[CCTextureCache sharedTextureCache] removeAllTextures]; 

這樣的話,當我更換場景菜單,並返回到遊戲中,他不重,因此加載緩存得到他無法找到所需幀的錯誤。

因此,似乎我可以在每個場景中只將幀加載到緩存一次,如果我刪除它並返回到現場,它不會再次加載並出錯。反之亦然,如果我清理我的菜單場景中的緩存,轉到遊戲並返回到菜單,那麼菜單場景也不會加載緩存,並且無法找到我需要的幀。

這很有趣。這是有原因的嗎?或者我在這裏錯了嗎?

非常感謝。

回答

1

的事件,如果你從oldScene改變場景newScene的順序如下:

  1. newScene:初始化
  2. oldScene:dealloc的

因此,如果您在初始化精靈幀,並且清除前一場景的dealloc中的緩存,那麼精靈幀將在新場景中不可用。

你最好的選擇是在你用新場景調用replaceScene之前清除緩存。

+0

非常感謝!這是一個非常好的答案! – Curnelious 2011-12-24 10:03:11