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