在cocos2d中使用精灵帧缓存 - 正确的方法

时间:2013-08-15 06:49:38

标签: objective-c cocos2d-iphone

我正在使用精灵帧缓存来上传用于动画的plist和精灵表。 我有2种方法,我相信其中一种错误

  1. 我必须在开始时加载我可以缓存的所有东西,因为它需要时间,所以在场景的开始我加载所有我需要的近期。(但现在我的缓存已满!)

  2. 缓存应该保持尽可能空,所以我在启动动画时加载到缓存(这需要一些时间不是吗?我认为它会轻弹我的游戏),并将其删除我完成它的同一时刻。 (现在缓存不满,但我必须多次加载/重新加载。)

  3. 每次都必须注意从缓存中删除未使用的精灵?

  4. 加载到缓存是:

    [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"];
    

    删除未使用的是:

    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
    

    我可以在iPad上看到系统正在尝试删除未使用的精灵并遇到问题。 究竟是什么工作方式?

1 个答案:

答案 0 :(得分:3)

经过大量研究后,我得出了一些结论:

首先,实时(动画开始时)将帧加载到batchNode需要花费时间,而对于大图像(iPad),它有时会冻结场景。

因此,在某些情况下,你必须在init方法中加载图像以缓存,以避免这种情况,因为你没有别的方法,这就是我们无论如何都有缓存的原因:

[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"];

如果这个动画经常发生,你不想从缓存中清除它。

如果你不使用它,应该从缓存中清除其他东西

[[CCTextureCache sharedTextureCache] removeUnusedTextures];

将仅从缓存中清除已从屏幕中删除的精灵。

仅仅清除框架还不够:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

在sprites-sheets图像不那么大的其他场景中,您可以在动画开始时将它们加载到batchNode,并在最后删除它们。