zoukankan      html  css  js  c++  java
  • cocos2d-x Loading界面实现资源加载

    有时候场景中的资源加载过多的话就会引起游戏进入的时候很卡,因为那是边加载边显示。在tests例子里面有一个很好的例子叫做TextureCacheTest,里面讲解了如何写loading。

     

    #include "LoadingScene.h"
    #include "HelloWorldScene.h"
    bool LoadingScene::init()
    {
        totalNum=9; //记录总的加载数量
        haveLoadedNum=0;   //记录已加载的数量
        this->loading();
        return true;
    }
    CCScene *LoadingScene::scene()
    {
        CCScene *scene=CCScene::create();
        LoadingScene *layer=LoadingScene::create();
        scene->addChild(layer);
        return scene;
    }
    void LoadingScene::loading()
    {
        CCSize size=CCDirector::sharedDirector()->getWinSize();
        ttf=CCLabelTTF::create("%0", "Arial", 12);    //显示加载进度
        
        CCLabelTTF *havettf=CCLabelTTF::create("Loading", "Arial", 12);
        this->addChild(ttf,1);
        this->addChild(havettf,1);
        ttf->setPosition(ccp(size.width/3, size.height/2));
        havettf->setPosition(ccp(size.width/2, size.height/2));
        
        CCTextureCache::sharedTextureCache()->addImageAsync("youlost.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("youwin.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("cat.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catBody1.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catBody2-4.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catBody3.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catHand1.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catHand2.png", this, callfuncO_selector(LoadingScene::loadedCallBack));
        CCTextureCache::sharedTextureCache()->addImageAsync("catTail.png", this, callfuncO_selector(LoadingScene::loadedCallBack));  
    }
    void LoadingScene::loadedCallBack()
    {
        haveLoadedNum++;
        this->runAction(CCDelayTime::create(15));
        char tmp[10];
        sprintf(tmp, "%%%d",(int)((float)haveLoadedNum/totalNum*100));
        ttf->setString(tmp);  //更改加载进度
        if (haveLoadedNum==9)
        {
            this->removeChild(ttf, true);   //加载完成后,移除加载进度显示
            CCScene *newscne=HelloWorld::scene();
            CCDirector::sharedDirector()->replaceScene(newscne); //场景切换
        }
    }
    

    这样,在HelloWorld中,就可以通过

     

    bool HelloWorld::init()
    {
        if ( !CCLayer::init() )
        {
            return false;
        }   
        CCSprite *sp=CCSprite::createWithTexture(CCTextureCache::sharedTextureCache()->textureForKey("youlost.png"));
        addChild(sp,1);
    	}

    来获得预加载的图片,从而缓解游戏初步加载时的卡现象。

  • 相关阅读:
    Android自己定义组件系列【2】——Scroller类
    ostringstream的使用方法
    什么是Spring?Spring是什么?
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    伤不起的戴尔台式机XPS8700脆弱的蓝牙
    cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
    SSL工作原理
    AfxMessageBox和MessageBox差别
    oninput,onpropertychange,onchange的使用方法和差别
    Bootstrap网站模板
  • 原文地址:https://www.cnblogs.com/james1207/p/3279837.html
Copyright © 2011-2022 走看看