zoukankan      html  css  js  c++  java
  • CSplashScene类

    #ifndef __TRANSITIONSCENE_H__
    #define __TRANSITIONSCENE_H__
    
    #include "GameFrameHead.h"
    
    class CGameScene;
    
    class GAMEFRAME_API CSplashScene : public CCScene
    {
    public:
        enum TargetScenes
        { 
            TargetSceneINVALID        = 0, 
            TargetSceneFirstScene    = 1, 
            TargetSceneOtherScene    = 2, 
            TargetSceneMAX            = 3,
        }; 
    public:
        CSplashScene(); 
        virtual    ~CSplashScene();
    
        static CSplashScene*    create(CGameScene* pScene); 
        bool                    init();
        bool                    init(CGameScene* pScene); 
        
        void                    retainPrevResource();
    protected:
        virtual void            onEnter();
        virtual void            onEnterTransitionDidFinish();
        void                    loadingCallBack(CCObject *obj);
    
        void                    onDelayLoading();
        void                    replaceScene();
    
        virtual    void            loadingPercent();
        float                    getPercent();
    private: 
        //virtual void update(float dt); 
    
    private:
        static CSplashScene*    g_pSplashScene;
    
    
        CGameScene*                m_pCurScene;
        int                        m_nCurTag;
        CGameScene*                m_pNextScene;
    
        int                        m_nNumberOfSprites;
        int                        m_nNumberOfLoadedSprites;
        
        float                    m_fPercent;
    
        CCLabelTTF*                m_pLabelLoading;
    
        bool                    m_bRetainResource;
    
    };
    
    
    #endif //__TRANSITIONSCENE_H__
    #include "SplashScene.h"
    #include "Config.h"
    #include "XSprite.h"
    #include "GameScene.h"
    
    CSplashScene* CSplashScene::g_pSplashScene = NULL;
    
    CSplashScene::CSplashScene()
    {
        m_pCurScene = NULL;
        m_pNextScene = NULL;
        m_nNumberOfSprites = 0;
        m_nNumberOfLoadedSprites = 0;
        m_fPercent = 0;
        m_bRetainResource = false;
    }
    
    CSplashScene::~CSplashScene()
    {
        CCLog("CSplashScene::~CSplashScene");
    }
    
    CSplashScene* CSplashScene::create(CGameScene* pScene )
    {
    
        CSplashScene* pSplashScene = new CSplashScene();
        if (pSplashScene && pSplashScene->init(pScene))
        {
            pSplashScene->autorelease();
            return pSplashScene;
        }
    
        CCLog("error: CTransitScene::create");
        SAFE_DELETE(pSplashScene);
        return NULL;
    
    }
    
    bool CSplashScene::init( CGameScene* pScene )
    {
        m_pCurScene =(CGameScene*) CCDirector::sharedDirector()->getRunningScene();
        if (m_pCurScene)
        {
            m_nCurTag = m_pCurScene->getSceneTag();
        }
    
        m_pNextScene = pScene;
    
        return true;
    }
    
    void CSplashScene::onEnter()
    {
        CCScene::onEnter();
    
    }
    
    void CSplashScene::loadingCallBack( CCObject *obj )
    {
        ++m_nNumberOfLoadedSprites;//每调用一次就+1  
        m_fPercent = (float) m_nNumberOfLoadedSprites / (float)m_nNumberOfSprites;
        this->loadingPercent();
    
        //全部加载完成后,就执行  
        if (m_nNumberOfLoadedSprites == m_nNumberOfSprites)  
        {  
            //加载完 延迟一下切换场景  
            CCDelayTime* pActDelay = CCDelayTime::create(0.5f);
            CCFiniteTimeAction* pAction = CCSequence::create(pActDelay, 
                CCCallFunc::create(this, callfunc_selector(CSplashScene::replaceScene)),
                NULL);
            this->runAction(pAction);
        }  
    
    }
    
    void CSplashScene::onEnterTransitionDidFinish()
    {
        CCScene::onEnterTransitionDidFinish();
    
        if (!m_bRetainResource)
        {
            //CCTextureCache::sharedTextureCache()->removeAllTextures();
            //释放当前一个场景
            if (CConfig::getInstance()->getElementInfoByItem(m_nCurTag))
            {
                vector<PlistInfo>& vecCurPlist = *(CConfig::getInstance()->getElementInfoByItem(m_nCurTag));
                for (vector<PlistInfo>::iterator it = vecCurPlist.begin(); it != vecCurPlist.end(); it++)
                {
                    CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile(it->strPlist.c_str());
                }
            }
        }
    
        CCDelayTime *delayAction = CCDelayTime::create(0.2f);
        CCCallFunc *callSelectorAction = CCCallFunc::create(this,callfunc_selector(CSplashScene::onDelayLoading));
        this->runAction(CCSequence::create(delayAction, callSelectorAction,NULL));
    
    }
    
    
    void CSplashScene::onDelayLoading()
    {
        //加载下一个场景
        //初始化元素  把plist形式的图片资源加载到内存
        vector<PlistInfo>& vecNextPlist = *(CConfig::getInstance()->getElementInfoByItem(m_pNextScene->getSceneTag()));
        m_nNumberOfSprites = vecNextPlist.size();
        for (vector<PlistInfo>::iterator it = vecNextPlist.begin(); it != vecNextPlist.end(); it++)
        {
            //加载图片到内存
            CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(it->strPlist.c_str(),it->strImage.c_str());
        }
    
        CCDelayTime *delayAction = CCDelayTime::create(0.2f);
        CCCallFunc *callSelectorAction = CCCallFunc::create(this,callfunc_selector(CSplashScene::replaceScene));
        this->runAction(CCSequence::create(delayAction, callSelectorAction,NULL));
    }
    
    void CSplashScene::replaceScene()
    {
        CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.2f, (CCScene*)m_pNextScene));
    }
    
    void CSplashScene::loadingPercent()
    {
    
    }
    
    float CSplashScene::getPercent()
    {
        return m_fPercent;
    }
    
    void CSplashScene::retainPrevResource()
    {
        m_bRetainResource = true;
    }
  • 相关阅读:
    C++数字与字符串相互转化
    NextDate问题
    Mac使用host屏蔽某指定网站
    Pycharm里面使用anaconda配置环境
    Logisim
    XML有关知识
    Mac环境下的Tomcat
    Allow apps downloaded from Anywhere
    寻找两数之和
    最大子序列
  • 原文地址:https://www.cnblogs.com/newlist/p/3172938.html
Copyright © 2011-2022 走看看