半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统。可是却是开发上线中必须经历的东西。比方超级玛丽系列(一)中的正确的异步载入,正确的分层、正确的合成和载入plist、及时的移除未使用的cache、依照关卡动态载入当前关卡所需的资源等。

本章仅仅分享一下异步载入的逻辑,如有不正确的地方还望大家及时指出。

眼下我代码中须要异步载入的资源一共同拥有四类:

1.png    单个png的情况比較少

2.plist和png一起的打包资源

3.plist和pvr.ccz一起的打包资源

4.CocosStudio导出的.ExportJson后缀的动画文件

再反复一遍载入机制:全部的资源是按序载入的。不可同一时候载入多个文件。运行异步载入的处理肯定是写在void update(float f)中,做到按帧载入。

1.png的异步载入

Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadImgNum],
CC_CALLBACK_1(LoadingScene::imageAsyncCallback, this));

2.plist和png一起的打包资源

废话不多,直接上方法,没有载入plist的api,我们使用如1的方法载入png,然后在回调函数中载入plist。

Director::getInstance()->getTextureCache()->addImageAsync(reloadPlists[curReloadPlistNum]+"png",
CC_CALLBACK_1(LoadingScene::plistImageAsyncCallback, this));

注意回调函数的參数,这是plist异步载入的关键,形參是png纹理。

void LoadingScene::plistImageAsyncCallback(cocos2d::Texture2D* texture)
{
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPlists[curReloadPlistNum].append("plist"), texture);
curReloadPlistNum++;
loading = true;
}

3.plist和pvr.ccz一起的打包资源

类似2的方法。

Director::getInstance()->getTextureCache()->addImageAsync(reloadPvrPlists[curReloadPvrPlistNum] + "pvr.ccz",
CC_CALLBACK_1(LoadingScene::pvrPlistImageAsyncCallback, this));
void LoadingScene::pvrPlistImageAsyncCallback(cocos2d::Texture2D* texture)
{
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPvrPlists[curReloadPvrPlistNum].append("plist"), texture);
curReloadPvrPlistNum++;
loading = true;
}

4.CocosStudio导出的.ExportJson后缀的动画文件

ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(reloadExportJsons[curReloadExportJsonNum],
this, schedule_selector(LoadingScene::jsonAsyncCallback));
void LoadingScene::jsonAsyncCallback(float f)
{
curReloadExportJsonNum++;
loading = true;
}

四种载入方法已经介绍完了,仅仅要在update中做好按序载入就能够了。

怎样优化内存,载入尽量少的资源?

我的这个场景叫LoadingScene,这是一个中转场景,既是切换两个场景之间的过渡场景。用来释放上一个场景的资源和预载入下一个场景资源。

在这个场景中,我们能够释放掉cache中的全部文件。然后依据下个场景的内容来载入所需的文件。 这就须要我们做好配置工作,比方保卫萝卜,下一关仅仅有两种塔。我们仅仅载入这两种塔的动画就可以,而不须要全部塔全部载入。

还有在动画的异步载入----exportJson文件。这个异步载入。既能够载入动画缓存,还能够把跟它一起的plist和png一起载入到缓存中,全部假设想载入plist,也能够把它们到成精巧的动画。然后使用exportJson载入就可以使用里面的精灵。

最新文章

  1. center
  2. 你也可以当面霸-Servlet与JSP的原理及特点
  3. C# 中的多线程
  4. Oracle合并函数内容
  5. 前后端分离,接口API,契约
  6. Nginx 安装及配置、负载均衡https网站及转发后页面js、css等路径找不到问题、更换证书导致问题解决
  7. 移动端canvas文字图片合成并生成图片(canvas宽度自适应移动端屏幕)
  8. Docker 网络背后的原理探索
  9. C语言复习---找出报数最后一人
  10. 第16月第27天 pip install virtualenv ipython sip brew search
  11. Java Swing界面编程(18)---单行文本输入组件:JTextField
  12. C Primer Plus 创建友好的输入界面 笔记
  13. springboot 解决配置js/css/img缓存问题
  14. 【Selenium-WebDriver自学】WebDriver交互代码(十一)
  15. 文章如何做伪原创 SEO大神教你几招做"原创"网站文章的心得
  16. laravel 门面的介绍和使用
  17. mysql8.0无法给用户授权或提示You are not allowed to create a user with GRANT的问题
  18. c++沉思录中 对字符串进行围边 横向连接 竖向连接操作的练习
  19. jquery实现顶部浮动效果
  20. Xamarin Android SDK无法更新的解决办法

热门文章

  1. tomcat 系统服务 outofmemory
  2. JAVA 软件升级版本号比较
  3. python 字符串处理
  4. Eclipse3.6 添加JUnit源代码
  5. UVA - 10057 A mid-summer night's dream.
  6. ASP.NET给Table动态添加删除行,并且得到控件的值
  7. 浅谈HTML之模仿人人网登陆界面(新手必学)
  8. StrPos,StrScan,
  9. 双卡双待支持双电池 夏新N808深度评测_夏新手机评测-泡泡网
  10. linux下执行sh文件报错:oswatcher_restart.sh: line 13: ./startOSW.sh: Permission denied