昨天下载了最新的cocos2d-x 是2.0.1版本的...所以本文章是参考2.0版本的例子写的...
可以发现,2.0版本后不单单只有一个帧率了..还多了两个参数.第一个参数可以理解为场景中的对象个数吧.第二个还不清楚...
1. 创建好一个工程后,先修改对于的.h文件
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- virtual bool init();
- static cocos2d::CCScene* scene();
- HelloWorld();
- void addSprite();//用于加载完成后添加精灵
- void loadingCallBack(cocos2d::CCObject *obj);//读进度回调函数
- LAYER_CREATE_FUNC(HelloWorld);
- private:
- cocos2d::CCLabelTTF *m_pLableLoading;
- cocos2d::CCLabelTTF *m_pLabelPercent;
- int m_nNumberOfSprites;
- int m_nNumberOfLoadedSprites;
- };
2. 然后在对应的cpp文件中完成各种函数
- //原例子中的代码都是在构造函数中写的.在这里构造函数只用于初始化了两个成员变量
- HelloWorld::HelloWorld():m_nNumberOfSprites(20),m_nNumberOfLoadedSprites(0)
- {
- }
- bool HelloWorld::init()
- {
- bool bRet = false;
- do
- {
- CC_BREAK_IF(! CCLayer::init());
- CCSize size = CCDirector::sharedDirector()->getWinSize();
- //创建读条时的标签
- m_pLableLoading = CCLabelTTF::create("Loading...","Arial",20);
- m_pLabelPercent = CCLabelTTF::create("%0","Arial",30);
- m_pLabelPercent->setPosition(CCPointMake(size.width/2, size.height/2 +50));
- m_pLableLoading->setPosition(CCPointMake(size.width/2, size.height/2 -10));
- this->addChild(m_pLableLoading);
- this->addChild(m_pLabelPercent);
- //加载图片到Cache...每加载一次就调用我们自己写的回调函数
- CCTextureCache::sharedTextureCache()->addImageAsync("img/bg.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/01.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/02.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/03.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/04.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/05.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/06.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/07.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/08.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/09.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/10.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/11.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/12.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/13.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/14.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/15.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/16.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/17.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/18.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- CCTextureCache::sharedTextureCache()->addImageAsync("img/19.png", this, callfuncO_selector(HelloWorld::loadingCallBack));
- bRet = true;
- } while (0);
- return bRet;
- }
3. 代码很多都是重复的..只是加载的图片不一样,大家注意加载的图片路径就可以了..接下来实现回调函数
- //回调函数
- void HelloWorld::loadingCallBack(CCObject *obj)
- {
- ++m_nNumberOfLoadedSprites;//每调用一次就+1
- char tmp[10];
- //这里格式化,因为我们只加载了20张图片,所以除以总数后就是0.05,所以每加载一次就涨5%
- sprintf(tmp,"%%%d",(int)(((float)m_nNumberOfLoadedSprites / m_nNumberOfSprites) * 100));
- m_pLabelPercent->setString(tmp);//重设标签的内容
- //判断,如果全部加载完成后,就执行
- if (m_nNumberOfLoadedSprites == m_nNumberOfSprites)
- {
- //移除那两个标签文字..
- this->removeChild(m_pLableLoading, true);
- this->removeChild(m_pLabelPercent, true);
- //调用自己写的函数..从新绘制场景内容
- addSprite();
- }
- }
4. 实现addSprite()函数,这个函数从新初始化了场景..然后显示
- void HelloWorld::addSprite()
- {
- CCSize size = CCDirector::sharedDirector()->getWinSize();
- //创建背景图片
- CCSprite *bg = CCSprite::create("img/bg.png");
- bg->setPosition(CCPointMake(size.width/2, size.height/2));
- //创建其他小图片
- CCSprite *s1 = CCSprite::create("img/01.png");
- CCSprite *s2 = CCSprite::create("img/02.png");
- CCSprite *s3 = CCSprite::create("img/03.png");
- CCSprite *s4 = CCSprite::create("img/04.png");
- CCSprite *s5 = CCSprite::create("img/05.png");
- CCSprite *s6 = CCSprite::create("img/06.png");
- CCSprite *s7 = CCSprite::create("img/07.png");
- CCSprite *s8 = CCSprite::create("img/08.png");
- CCSprite *s9 = CCSprite::create("img/09.png");
- CCSprite *s10 = CCSprite::create("img/10.png");
- CCSprite *s11 = CCSprite::create("img/11.png");
- CCSprite *s12 = CCSprite::create("img/12.png");
- CCSprite *s13 = CCSprite::create("img/13.png");
- CCSprite *s14 = CCSprite::create("img/14.png");
- CCSprite *s15 = CCSprite::create("img/15.png");
- CCSprite *s16 = CCSprite::create("img/16.png");
- CCSprite *s17 = CCSprite::create("img/17.png");
- CCSprite *s18 = CCSprite::create("img/18.png");
- CCSprite *s19 = CCSprite::create("img/19.png");
- //设置位置
- s1->setPosition(CCPointMake(70, size.height/2));
- s2->setPosition(CCPointMake(90, size.height/2));
- s3->setPosition(CCPointMake(110, size.height/2));
- s4->setPosition(CCPointMake(130, size.height/2));
- s5->setPosition(CCPointMake(150, size.height/2));
- s6->setPosition(CCPointMake(170, size.height/2));
- s7->setPosition(CCPointMake(190, size.height/2));
- s8->setPosition(CCPointMake(210, size.height/2));
- s9->setPosition(CCPointMake(230, size.height/2));
- s10->setPosition(CCPointMake(250, size.height/2));
- s11->setPosition(CCPointMake(270, size.height/2));
- s12->setPosition(CCPointMake(290, size.height/2));
- s13->setPosition(CCPointMake(310, size.height/2));
- s14->setPosition(CCPointMake(330, size.height/2));
- s15->setPosition(CCPointMake(350, size.height/2));
- s16->setPosition(CCPointMake(370, size.height/2));
- s17->setPosition(CCPointMake(390, size.height/2));
- s18->setPosition(CCPointMake(410, size.height/2));
- s19->setPosition(CCPointMake(430, size.height/2));
- //添加进入场景
- this->addChild(bg);
- this->addChild(s1);
- this->addChild(s2);
- this->addChild(s3);
- this->addChild(s4);
- this->addChild(s5);
- this->addChild(s6);
- this->addChild(s7);
- this->addChild(s8);
- this->addChild(s9);
- this->addChild(s10);
- this->addChild(s11);
- this->addChild(s12);
- this->addChild(s13);
- this->addChild(s14);
- this->addChild(s15);
- this->addChild(s16);
- this->addChild(s17);
- this->addChild(s18);
- this->addChild(s19);
- }
这样,运行的时候就会出现读条界面了,但是闪的很快,比较电脑的处理能力还是很快的嘛..可以在回调函数里面设置一个断点,就会发现是5%的增长..
就我的理解来说,这一个例子的思路,首先是把图片加载进入内存.然后出发一次回调函数,更新读条进度..直到100%就调用另外函数...