6

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

  1. 我必须在开始时加载所有我能缓存的东西,因为这需要时间,所以在场景开始时我加载了所有我需要的东西到不久的将来。(但现在我的缓存已满!)

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

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

加载到缓存是:

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

删除未使用的是:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

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

4

1 回答 1

3

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

首先,将帧实时(在动画开始时)加载到batchNode.

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

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

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

如果您不使用其他内容,则应从缓存中清除它

[[CCTextureCache sharedTextureCache] removeUnusedTextures];

只会从缓存中清除已经从屏幕上删除的精灵。

仅仅清除框架是不够的:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

在 sprites-sheets 图像不是那么大的其他情况下,您可以将它们加载到batchNode动画开始的那一刻,并在结束时将它们删除。

于 2013-08-15T09:39:30.747 回答