cocos2d-x 资源缓存清除

最近遇到的问题:

在cocos2d-x中,根据不同类型的游戏设置了不同类型的搜索路径,希望以此区分调用的csb等资源。

但实际运行时仍有图片资源显示错乱,根据反复测试观察,发现以下特征:

1. 某几个游戏之间只存在小部分图片内容差异,其图片资源,包括相对路径都是一样的(即只是最外层文件夹命名不同)。

2. 通过调试,发现设置的搜索路径仍是有效的,其调用的csb文件路径正常,但是csb中包含的图片有误。

3. csb中包含的图片路径均为相对路径。

那么推断该问题原因在于自动保存的图片缓存(plist,png等),因为没有清除缓存,所以导致两个游戏切换时,调用的资源缓存仍是上个游戏残留的。

而在测试过程中有些游戏没问题是因为它们调用的资源目录结构/名称都不一样,所以不会使用上次残留的缓存,依然正常运行。

搜索发现cocos2d-x中的确存在对应的清除缓存函数:

清除动画(json等):removeAnimation(name)

清除精灵框帧缓存(plist等):removeUnusedSpriteFrames()

清除图片缓存(png,jpg等):removeUnusedTextures()

为了保证清除有效,最好是从上至下进行清除。

类似于java的gc机制,引用为0的资源就清理掉。

只要在退出游戏的时候,调用函数即可,经测试发现可行,游戏正常切换。

不过大量的缓存清除操作可能会拖慢游戏运行速度,如果并不想执行该操作的话,也可以通过调整资源名称,使其互不相同即可。

(经测试,就算是不同plist文件中的图片资源也不能重名,否则仍然会重用)

另外需要注意的一点是字体资源(fnt等)无法清除,目前找到的官方函数貌似在cocos2dx-3.10的版本前后才有,而且根据反馈有一定可能会导致崩溃。

所以目前暂时还是采用不同名字的方法来避免字体资源的重用。

猜你喜欢

转载自blog.csdn.net/Vis_Stu/article/details/78638219