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

来获得预加载的图片,从而缓解游戏初步加载时的卡现象。

最新文章

  1. 现在开始(Do It Now)
  2. Entity Framework 异常档案
  3. CheckBoxList1复选框
  4. iOS CoreMotion框架(传感器)
  5. 解决myeclipse每次启动注册码过期输入注册码
  6. c# winform 子窗体访问父窗体中的方法和变量
  7. linux mysql-server和mysql-client
  8. VBS脚本和HTML DOM自动操作网页
  9. python中的time模块
  10. Gradle入门到实战(一) — 全面了解Gradle
  11. js重点--原型链继承详解
  12. 关于NB-IoT的十大问题和答案【转】
  13. 第二章 C#语法基础(2.1 C#语言的数据类型一)
  14. Bleve代码阅读(一)——新建索引
  15. curl 命令简介
  16. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
  17. 将 Graphviz .dot 文件转换为其他格式的图像
  18. C#编程(六十九)----------DLR简介
  19. cdoj第13th校赛初赛L - Lovely princess
  20. activeMQ的高级特性:嵌入activemq

热门文章

  1. JAVA二维数组小记
  2. MySQL 二进制日志(Binary Log)
  3. CAEmitterLayer实现粒子效果
  4. Nuget找不到服务器
  5. uploadify3.1 参数 中文详解
  6. Android(java)学习笔记260:JNI之native方法头文件的生成
  7. USB挂起与唤醒.
  8. css布局&初始化&基准样式
  9. 使用F#开发量化模型都缺什么?
  10. (转)asp.net(C#)手记之Repeater与两级菜单