zoukankan      html  css  js  c++  java
  • cocos2dx3.2 异步载入和动态载入

    半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统。可是却是开发上线中必须经历的东西。比方超级玛丽系列(一)中的正确的异步载入,正确的分层、正确的合成和载入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载入就可以使用里面的精灵。



  • 相关阅读:
    数据结构:关于重建二叉树的三种思路
    操作系统:进程调度算法详解之FCFS和SPF篇
    Java反射机制浅析
    数据挖掘:基于TF-IDF算法的数据集选取优化
    RC隔离 更新where条件列 没有索引的情况
    RR区间锁 不是唯一索引,即使区间内没值,也锁
    If one session has a shared or exclusive lock on record R in an index, another session cannot insert
    RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读
    使用next-key locks 用于搜索和索引扫描,可以防止幻读
    Gap Locks 区间锁
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5197186.html
Copyright © 2011-2022 走看看