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);
	}
来获得预加载的图片,从而缓解游戏初步加载时的卡现象。



欢迎转载,转载请注明出处:http://blog.csdn.net/somestill/article/details/10258519

你可能感兴趣的:(Cocos2d-x学习笔记)