我正在使用精灵帧缓存来上传用于动画的plist和精灵表。 我有2种方法,我相信其中一种错误。
我必须在开始时加载我可以缓存的所有东西,因为它需要时间,所以在场景的开始我加载所有我需要的近期。(但现在我的缓存已满!)
缓存应该保持尽可能空,所以我在启动动画时加载到缓存(这需要一些时间不是吗?我认为它会轻弹我的游戏),并将其删除我完成它的同一时刻。 (现在缓存不满,但我必须多次加载/重新加载。)
我每次都必须注意从缓存中删除未使用的精灵?
加载到缓存是:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"];
删除未使用的是:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
我可以在iPad上看到系统正在尝试删除未使用的精灵并遇到问题。 究竟是什么工作方式?
答案 0 :(得分:3)
经过大量研究后,我得出了一些结论:
首先,实时(动画开始时)将帧加载到batchNode
需要花费时间,而对于大图像(iPad),它有时会冻结场景。
因此,在某些情况下,你必须在init方法中加载图像以缓存,以避免这种情况,因为你没有别的方法,这就是我们无论如何都有缓存的原因:
[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"];
如果这个动画经常发生,你不想从缓存中清除它。
如果你不使用它,应该从缓存中清除其他东西
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
将仅从缓存中清除已从屏幕中删除的精灵。
仅仅清除框架还不够:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
在sprites-sheets图像不那么大的其他场景中,您可以在动画开始时将它们加载到batchNode
,并在最后删除它们。