cocos2d-x 关于home键黑屏和游戏loading界面

转自:http://blog.csdn.net/qq634416025/article/details/8041363

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

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

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

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

	cocos2d::CCLabelTTF *m_pLabelLoading;
	cocos2d::CCLabelTTF *m_pLabelPercent;
	int m_nNumberOfSprites;//计数用 在构造函数中初始化成要加载的资源个数
	int m_nNumberOfLoadedSprites;//初始化为0

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

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

	m_pLabelLoading->setPosition(CCPointMake(size.width / 2, size.height / 2 - 20));
	m_pLabelPercent->setPosition(CCPointMake(size.width / 2, size.height / 2 + 20));

	this->addChild(m_pLabelLoading,10);
	this->addChild(m_pLabelPercent,10);
//
	CCTextureCache::sharedTextureCache()->addImageAsync("gobacknormal.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("gobackselected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/achievementnormal.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/achievementselected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1normal.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2normal.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3normal.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1selected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2selected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3selected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle1lock.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2lock.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3lock.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle2lockselected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/Bighurdle3lockselected.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Bighurdle/main.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));
	CCTextureCache::sharedTextureCache()->addImageAsync("Smallhurdle/starfull.png", this, callfuncO_selector(BighurdleLayer::loadingCallBack));

然后在回调函数

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

	if (m_nNumberOfLoadedSprites == m_nNumberOfSprites)
	{
		this->removeChild(m_pLabelLoading, true);
		this->removeChild(m_pLabelPercent, true);
		addSprite();//这里是自己写得添加精灵的函数
	}
}

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

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

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

  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);
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();
	Loading *loading = new Loading();
	//CCSprite *sp = CCSprite::create("HelloWorld.png");
	//sp->setPosition(ccp(winSize.width/2, winSize.height/2));
	//loading->addChild(sp);
	CCDirector::sharedDirector()->getRunningScene()->addChild((CCNode *)loading);



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值