无法清除场景之间的缓存?

时间:2011-12-23 18:15:02

标签: cocos2d-iphone

我在cocos2d中提到了一件奇怪的事情。

在我的游戏场景和菜单场景的初始化中,我将一个frameCache plist和一个spriteSheet加载到缓存中。

我发现如果在我的游戏场景dealloc方法中,我用以下方法清理缓存:

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

所以当我将场景替换为菜单并返回游戏时,他不会再次加载缓存,因此会得到他无法找到所需帧的错误。

所以我似乎只能在每个场景中将帧加载到缓存中一次,如果我将其删除并返回场景,它将不会再次加载并获得错误。

反之亦然,如果我清理菜单场景中的缓存,转到游戏并返回菜单,那么菜单场景也不会加载缓存而无法找到我所需的帧。

这很有意思。这是有原因的吗?或者我在某处错了?

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果将场景从oldScene更改为newScene,则事件序列如下:

  1. newScene:init
  2. oldScene:dealloc
  3. 因此,如果在init中加载精灵帧,并清除前场景的dealloc中的缓存,则新场景中的精灵帧将不可用。

    您最好的选择是在使用新场景调用replaceScene之前清除缓存。