cocos2d-x Loading界面实现资源加载 (一)

2014-11-23 21:27:53 · 作者: · 浏览: 14

有时候场景中的资源加载过多的话就会引起游戏进入的时候很卡,因为那是边加载边显示。在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); //场景切换 } } #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::sharedTextureCa