Cocos2d-x开发中关于资源的预加载的一点补充
对于像我这样的COCOS2D-X初使用者来说,资源何时需要预加载?在什么样的情况下需要?等等,这都是一些问题。
Cocos2d-x框架中提供了使用preloadEffect方法预加载声音文件,以及提供CCTextureCache::sharedTextureCache()->addImageAsync方法用来预加载图像文件。
在框架提供的DEMO中,有的使用了预加载图像文件技术,有的没有。看起来,初步的结果是在场景中使用大量图像时才有必要预加载。相信大多数同志都肯定这一点。
在我现在编写的一个简单的背单词软件(练习而已)中,就证明了上述结论。
例如,我的软件中有一个场景用于实现类似于实现射击方式选择正确的汉语意义,以便提供背单词的乐趣。其中除了一个800X480的背景外,还使用10个左右的小图片,自然也有一个粒子系统。
现在,我遇到的问题是,如何不使用上述异步预先加载方法,在我的I9100上,出现混乱现象(相信你能理解其中的意思),即类似于内存不够时的有时这样有时那样的现象。
在我充分肯定了不存在内存漏洞(包括在启动到此场景过程中相关的几个场景)的前提下,我使用了上述异步预先加载方法,结果一切正常了(是否绝对,我还不能肯定)。
我是受到如下文章启发,才使用上述技巧的。
How to preload your game assets in loading scene
URL: http://xperienced.com.pl/blog/how-to-preload-your-game-assets-in-loading-scene
其中提到很关键的一句话:
If you are building a game for an iPhone then most probably, at some point of time, you will realize that you need a loading screen in which some (or even all) of your game assets should be preloaded. If you are not going to preload it but rather load it on demand, then you might experience some performance issues when a resource is initially loaded.
当然,在我的上述场景中使用了SQLITE技术加载数据库中数据,也可能是导致采用上述办法的重要原因之一。遗憾的是,目前COCOS2D-X并没有提供有关于异步加载SQLITE数据的支持。