【转载】cocos2d-x关于home键黑屏和游戏loading界面

【转载】

源地址:http://blog.csdn.net/qq634416025/article/details/8041363

 

 

有时候场景中的资源加载过多的话就会引起游戏进入的时候很卡,因为那是边加载边显示。还有在游戏中按下home键 再进入游戏的时候会有一段时间的黑屏,那是因为游戏要重新加载资源,这样用户体验非常不好。

我在tests例子里面发现一个很好的例子叫做TextureCacheTest,里面讲解了如何写loading。

首先在类头文件里面写上:

 

[cpp] view plaincopy
 
  1. //loading......callback  
  2. void loadingCallBack(cocos2d::CCObject *obj);  
  3. void addSprite();  
  4.   
  5. cocos2d::CCLabelTTF *m_pLabelLoading;  
  6. cocos2d::CCLabelTTF *m_pLabelPercent;  
  7. int m_nNumberOfSprites;//计数用 在构造函数中初始化成要加载的资源个数  
  8. int m_nNumberOfLoadedSprites;//初始化为0  

然后在cpp里面实现:这是我随便截取的代码

 

 

[cpp] view plaincopy
 
  1. CCSize size = CCDirector::sharedDirector()->getWinSize();  
  2. //////////////////////////////////////////////////////////////////////////  
  3.     //loading界面  
  4.     m_pLabelLoading = CCLabelTTF::create("loading...""Arial", 15);  
  5.     m_pLabelPercent = CCLabelTTF::create("%0""Arial", 15);  
  6.   
  7.     m_pLabelLoading->setPosition(CCPointMake(size.width / 2, size.height / 2 - 20));  
  8.     m_pLabelPercent->setPosition(CCPointMake(size.width / 2, size.height / 2 + 20));  
  9.   
  10.     this->addChild(m_pLabelLoading,10);  
  11.     this->addChild(m_pLabelPercent,10);  
  12. //////////////////////////////////////////////////////////////////////////  
  13.     CCTextureCache::sharedTextureCache()->addImageAsync("gobacknormal.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  14.     CCTextureCache::sharedTextureCache()->addImageAsync("gobackselected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  15.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/achievementnormal.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  16.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/achievementselected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  17.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1normal.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  18.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2normal.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  19.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3normal.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  20.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1selected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  21.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2selected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  22.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3selected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  23.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1lock.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  24.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2lock.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  25.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3lock.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  26.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2lockselected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  27.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3lockselected.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  28.     CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/main.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  
  29.     CCTextureCache::sharedTextureCache()->addImageAsync("Smallhurdle/starfull.png"this, callfuncO_selector(BighurdleLayer::loadingCallBack));  

然后在回调函数

 

 

[cpp] view plaincopy
 
  1. void BighurdleLayer::loadingCallBack(cocos2d::CCObject *obj)  
  2. {  
  3.     ++m_nNumberOfLoadedSprites;  
  4.     char tmp[10];  
  5.     sprintf(tmp,"%%%d", (int)(((float)m_nNumberOfLoadedSprites / m_nNumberOfSprites) * 100));  
  6.     m_pLabelPercent->setString(tmp);  
  7.   
  8.     if (m_nNumberOfLoadedSprites == m_nNumberOfSprites)  
  9.     {  
  10.         this->removeChild(m_pLabelLoading, true);  
  11.         this->removeChild(m_pLabelPercent, true);  
  12.         addSprite();//这里是自己写得添加精灵的函数  
  13.     }  
  14. }  

如果有更好的方法,请告知我,谢谢 共同进步

二.当按home键到桌面去,然后回到游戏弹出个进度条 然后游戏开始

我们只需要在AppDelegate.cpp里面添加layer就可以了 然后layer里面弄上定时器 一段时间后自动取消

 

[cpp] view plaincopy
 
    1. // this function will be called when the app is active again  
    2. void AppDelegate::applicationWillEnterForeground()  
    3. {  
    4.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
    5.     Loading *loading = new Loading();  
    6.     //CCSprite *sp = CCSprite::create("HelloWorld.png");  
    7.     //sp->setPosition(ccp(winSize.width/2, winSize.height/2));  
    8.     //loading->addChild(sp);  
    9.     CCDirector::sharedDirector()->getRunningScene()->addChild((CCNode *)loading);  
posted @ 2013-04-13 14:53  EdwardY  阅读(474)  评论(0)    收藏  举报