cocos2dx素材实现预先加载

#ifndef _TEXTURECACHE_TEST_H_

#define _TEXTURECACHE_TEST_H_

 

#include "cocos2d.h"

#include "../testBasic.h"

#include "platform/platform.h"

 

class TextureCacheTest : public CCLayer

{

public:

    TextureCacheTest();

    void addSprite();

    void loadingCallBack(cocos2d::CCObject *obj);

 

private:

    cocos2d::CCLabelTTF *m_pLabelLoading;

    cocos2d::CCLabelTTF *m_pLabelPercent;

    int m_nNumberOfSprites;

    int m_nNumberOfLoadedSprites;

};

 

class TextureCacheTestScene : public TestScene

{

public:

    virtual void runThisTest();

};

 

#endif // _TEXTURECACHE_TEST_H_

 
cpp文件
 
// enable log

#define COCOS2D_DEBUG 1

 

#include "TextureCacheTest.h"

 

USING_NS_CC;

 

TextureCacheTest::TextureCacheTest()

: m_nNumberOfSprites(20)

, m_nNumberOfLoadedSprites(0)

{

    CCSize size = CCDirector::sharedDirector()->getWinSize();

 

    m_pLabelLoading = CCLabelTTF::create("loading...","Arial", 15);

    m_pLabelPercent = CCLabelTTF::create("%0", "Arial", 15);

 

    m_pLabelLoading->setPosition(ccp(size.width / 2, size.height / 2 - 20));

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

 

    this->addChild(m_pLabelLoading);

    this->addChild(m_pLabelPercent);

 

    // load textrues

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/HelloWorld.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    //callfuncO_selector设置回调方法 设置加载百分比

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_01.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_02.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_03.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_04.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_05.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_06.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_07.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_08.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_09.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_10.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_11.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_12.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_13.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/grossini_dance_14.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/background1.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/background2.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/background3.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

    CCTextureCache::sharedTextureCache()->addImageAsync("Images/blocks.png", this,callfuncO_selector(TextureCacheTest::loadingCallBack));

}

 

void TextureCacheTest::loadingCallBack(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)

    {//加载全部完成后 去添加CCSprite

        this->removeChild(m_pLabelLoading, true);

        this->removeChild(m_pLabelPercent, true);

        addSprite();

    }

}

 

void TextureCacheTest::addSprite()

{

    CCSize size = CCDirector::sharedDirector()->getWinSize();

 

    // create sprites

 

    CCSprite *bg = CCSprite::create("Images/HelloWorld.png");

    bg->setPosition(ccp(size.width / 2, size.height / 2));

 

    CCSprite *s1 = CCSprite::create("Images/grossini.png");

    CCSprite *s2 =CCSprite::create("Images/grossini_dance_01.png");

    CCSprite *s3 =CCSprite::create("Images/grossini_dance_02.png");

    CCSprite *s4 =CCSprite::create("Images/grossini_dance_03.png");

    CCSprite *s5 =CCSprite::create("Images/grossini_dance_04.png");

    CCSprite *s6 =CCSprite::create("Images/grossini_dance_05.png");

    CCSprite *s7 =CCSprite::create("Images/grossini_dance_06.png");

    CCSprite *s8 =CCSprite::create("Images/grossini_dance_07.png");

    CCSprite *s9 =CCSprite::create("Images/grossini_dance_08.png");

    CCSprite *s10 =CCSprite::create("Images/grossini_dance_09.png");

    CCSprite *s11 =CCSprite::create("Images/grossini_dance_10.png");

    CCSprite *s12 =CCSprite::create("Images/grossini_dance_11.png");

    CCSprite *s13 =CCSprite::create("Images/grossini_dance_12.png");

    CCSprite *s14 =CCSprite::create("Images/grossini_dance_13.png");

    CCSprite *s15 =CCSprite::create("Images/grossini_dance_14.png");

 

    // just loading textures to slow down

    CCSprite::create("Images/background1.png");

    CCSprite::create("Images/background2.png");

    CCSprite::create("Images/background3.png");

    CCSprite::create("Images/blocks.png");

 

    s1->setPosition(ccp(50, 50));

    s2->setPosition(ccp(60, 50));

    s3->setPosition(ccp(70, 50));

    s4->setPosition(ccp(80, 50));

    s5->setPosition(ccp(90, 50));

    s6->setPosition(ccp(100, 50));

 

    s7->setPosition(ccp(50, 180));

    s8->setPosition(ccp(60, 180));

    s9->setPosition(ccp(70, 180));

    s10->setPosition(ccp(80, 180));

    s11->setPosition(ccp(90, 180));

    s12->setPosition(ccp(100, 180));

 

    s13->setPosition(ccp(50, 270));

    s14->setPosition(ccp(60, 270));

    s15->setPosition(ccp(70, 270));

 

    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);

}

 

 

void TextureCacheTestScene::runThisTest()

{

    CCLayer* pLayer = new TextureCacheTest();

    addChild(pLayer);

 

    CCDirector::sharedDirector()->replaceScene(this);

    pLayer->release();

}
原文地址:https://www.cnblogs.com/jiackyan/p/3019915.html