我正在使用精灵帧缓存来上传plists和精灵表,用于动画.我有2个方法,我相信其中一个是错的.
我必须加载我可以在开始时缓存的所有东西,因为它需要时间,所以在场景的开始我加载所有我需要的近期.(但现在我的缓存已满!)
缓存应该保持尽可能空,所以我在开始动画时加载到缓存(这需要一些时间不是吗?我认为它会轻弹我的游戏),并在我完成的同一时刻删除它用它 .(现在缓存不满,但我必须多次加载/重新加载.)
做我必须照顾到每一个时间删除从缓存中未使用的精灵?
加载到缓存是:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"];
Run Code Online (Sandbox Code Playgroud)
删除未使用的是:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
Run Code Online (Sandbox Code Playgroud)
我可以在iPad上看到系统正在尝试删除未使用的精灵并出现问题.究竟是什么工作方式?
小智 3
经过大量研究,我得出了一些结论:
首先,将帧实时(动画开始时)加载到 中确实需要时间batchNode,并且在大图像 (iPad) 的情况下,有时会冻结场景。
因此,在某些情况下,您必须在 init 方法中加载图像以进行缓存以避免这种情况,因为您没有其他方法,这就是为什么我们无论如何都有缓存:
[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"];
Run Code Online (Sandbox Code Playgroud)
如果此动画频繁发生,您不想将其从缓存中清除。
如果您不使用其他内容,则应从缓存中清除它
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
Run Code Online (Sandbox Code Playgroud)
只会从缓存中清除已从屏幕上删除的精灵。
仅仅清除帧是不够的:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
Run Code Online (Sandbox Code Playgroud)
在其他情况下,精灵表图像不是那么大,您可以将它们加载到batchNode动画开始的那一刻,并在结束时删除它们。
| 归档时间: |
|
| 查看次数: |
1948 次 |
| 最近记录: |