轉自:http://blog.csdn.net/xiaoxiangp/article/details/7706764
昨天下載了最新的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%就調用另外函數...
圖片的話,隨便弄個幾張就好了.顯示效果的話,注意設置位置就行,也可以用我的圖片啦:
http://115.com/file/anpzdgqa#img.rar
by...XX