加载资源进度条

来源:互联网 发布:java 判断小数 编辑:程序博客网 时间:2024/04/27 14:56

在很多游戏中,控制图片的载入和释放,可以使我们的游戏更加流畅,我们使用如下的方法载入图片并且回调load函数,在屏幕上显示载入进度

CCTextureCache::sharedTextureCache()->addImageAsync("Images/HelloWorld.png", this, callfuncO_selector(TextureCacheTest::loadingCallBack));

///////////////////////////

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

[cpp] view plaincopy
  1. #include "LoadingScene.h"  
  2. #include "HelloWorldScene.h"  
  3. bool LoadingScene::init()  
  4. {  
  5.     totalNum=9; //记录总的加载数量  
  6.     haveLoadedNum=0;   //记录已加载的数量  
  7.     this->loading();  
  8.     return true;  
  9. }  
  10. CCScene *LoadingScene::scene()  
  11. {  
  12.     CCScene *scene=CCScene::create();  
  13.     LoadingScene *layer=LoadingScene::create();  
  14.     scene->addChild(layer);  
  15.     return scene;  
  16. }  
  17. void LoadingScene::loading()  
  18. {  
  19.     CCSize size=CCDirector::sharedDirector()->getWinSize();  
  20.     ttf=CCLabelTTF::create("%0""Arial", 12);    //显示加载进度  
  21.       
  22.     CCLabelTTF *havettf=CCLabelTTF::create("Loading""Arial", 12);  
  23.     this->addChild(ttf,1);  
  24.     this->addChild(havettf,1);  
  25.     ttf->setPosition(ccp(size.width/3, size.height/2));  
  26.     havettf->setPosition(ccp(size.width/2, size.height/2));  
  27.       
  28.     CCTextureCache::sharedTextureCache()->addImageAsync("youlost.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  29.     CCTextureCache::sharedTextureCache()->addImageAsync("youwin.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  30.     CCTextureCache::sharedTextureCache()->addImageAsync("cat.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  31.     CCTextureCache::sharedTextureCache()->addImageAsync("catBody1.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  32.     CCTextureCache::sharedTextureCache()->addImageAsync("catBody2-4.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  33.     CCTextureCache::sharedTextureCache()->addImageAsync("catBody3.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  34.     CCTextureCache::sharedTextureCache()->addImageAsync("catHand1.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  35.     CCTextureCache::sharedTextureCache()->addImageAsync("catHand2.png"this, callfuncO_selector(LoadingScene::loadedCallBack));  
  36.     CCTextureCache::sharedTextureCache()->addImageAsync("catTail.png"this, callfuncO_selector(LoadingScene::loadedCallBack));    
  37. }  
  38. void LoadingScene::loadedCallBack()  
  39. {  
  40.     haveLoadedNum++;  
  41.     this->runAction(CCDelayTime::create(15));  
  42.     char tmp[10];  
  43.     sprintf(tmp, "%%%d",(int)((float)haveLoadedNum/totalNum*100));  
  44.     ttf->setString(tmp);  //更改加载进度  
  45.     if (haveLoadedNum==9)  
  46.     {  
  47.         this->removeChild(ttf, true);   //加载完成后,移除加载进度显示  
  48.         CCScene *newscne=HelloWorld::scene();  
  49.         CCDirector::sharedDirector()->replaceScene(newscne); //场景切换  
  50.     }  
  51. }  
这样,在HelloWorld中,就可以通过

[cpp] view plaincopy
  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !CCLayer::init() )  
  4.     {  
  5.         return false;  
  6.     }     
  7.     CCSprite *sp=CCSprite::createWithTexture(CCTextureCache::sharedTextureCache()->textureForKey("youlost.png"));  
  8.     addChild(sp,1);  
  9.     }  
来获得预加载的图片,从而缓解游戏初步加载时的卡现象。
0 0
原创粉丝点击