zoukankan      html  css  js  c++  java
  • CBiontCache

    /************************************************************************/
    /* 预先加载一些生物以备将来使用                                            */
    /* 专门用来缓存生物用的                                                    */
    /* 使用时通过生物ID或者名字来查找对象                                    */
    /************************************************************************/
    
    #ifndef __BIONTCACHE_H__
    #define __BIONTCACHE_H__
    #include "GameFrameHead.h"
    
    class CBiont;
    class GAMEFRAME_API CBiontCache
    {
    public:
        ~CBiontCache();
        static CBiontCache* getInstance();
        static void destroy();
        void init();
    
        void addBiont(int nType, CBiont* pBiont);
    
        vector<CBiont*>    getBionts(int nType);
    
        CBiont*    getBiontById(int nId);
    
        //获取一种生物  不够数拷贝
        //vector<CBiont*> getBiontKind(int nType, int nAmount);
    
        unsigned int getBiontKindSize();
    
        void releas();
    
        void setParentLayer(CCNode* pLayer, int zOrder = 1);
    
    //////////////////////////////////////////////////////////////////////////
        //没有添加到引用计数里(需要手动释放),调用这些函数释放 
        void removeAll();
        void removeVecBiont(int nType);
        void removeBiont(int nId);
    
    private:
        CBiontCache();
    
        static CBiontCache* g_pBiontCache;
    
        map<int, vector<CBiont*> > m_mapVecBion; //生物群字典(以类型为键)
        CCNode*        m_pParentLayer;        
    
    };
    
    #endif //__BIONTCACHE_H__
    #include "BiontCache.h"
    #include "Biont.h"
    
    CBiontCache* CBiontCache::g_pBiontCache = NULL;
    
    CBiontCache::CBiontCache()
    {
        m_mapVecBion.clear();
        m_pParentLayer = NULL;
    }
    
    CBiontCache::~CBiontCache()
    {
    
    }
    
    CBiontCache* CBiontCache::getInstance()
    {
        if (!g_pBiontCache)
        {
            g_pBiontCache = new CBiontCache();
            ASSERT(g_pBiontCache);
        }
        return g_pBiontCache;
    }
    
    void CBiontCache::destroy()
    {
        SAFE_DELETE(g_pBiontCache);
    }
    
    void CBiontCache::init()
    {
    
    }
    
    vector<CBiont*> CBiontCache::getBionts( int nType )
    {
        return m_mapVecBion.find(nType)->second;
    }
    
    void CBiontCache::releas()
    {
        this->removeAll();
    }
    
    void CBiontCache::addBiont( int nType, CBiont* pBiont )
    {
        ASSERT(pBiont);
    
        //判断存在已有的键
        for(map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            if (it->first == pBiont->getType())
            {
                ((*it).second).push_back(pBiont);
                return; //跳出 
            }
        }
    
        //没有就创建新键
        vector<CBiont*> vecBiont;
        vecBiont.push_back(pBiont);
        m_mapVecBion[nType] = vecBiont;
        
    }
    
    
    void CBiontCache::removeAll()
    {
        for (map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            for (vector<CBiont*>::iterator biontIt = (it->second).begin(); biontIt != (it->second).end(); biontIt++)
            {    
                (*biontIt)->removeAllChildrenWithCleanup(true);
                (*biontIt)->removeFromParentAndCleanup(true);
                SAFE_DELETE(*biontIt);
            }
            (it->second).clear();
        }
    }
    
    void CBiontCache::removeVecBiont( int nType ) 
    {
        for (map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            if (it->first == nType)
            {
                for (vector<CBiont*>::iterator vceBiontIt = (it->second).begin(); vceBiontIt != (it->second).end(); vceBiontIt++)
                {            
                    SAFE_DELETE(*vceBiontIt);
                }
                (it->second).clear();
                break;
            }
        }
    }
    
    
    void CBiontCache::removeBiont( int nId )
    {
        for (map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            for (vector<CBiont*>::iterator vecBiontIt =  (it->second).begin(); vecBiontIt != (it->second).end(); vecBiontIt++)
            {
                if ((*vecBiontIt)->getId() == nId)
                {
                    SAFE_DELETE(*vecBiontIt);
                    break;
                }
            }
        }
    
    }
    
    unsigned int CBiontCache::getBiontKindSize()
    {
        return m_mapVecBion.size();
    }
    
    void CBiontCache::setParentLayer( CCNode* pLayer, int zOrder /*= 1*/ )
    {
        ASSERT(pLayer);
    
        for (map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            for (vector<CBiont*>::iterator vecBiontIt =  (it->second).begin(); vecBiontIt != (it->second).end(); vecBiontIt++)
            {
                if (*vecBiontIt)
                {
                    if ((*vecBiontIt)->getParent())
                    {
                        m_pParentLayer->removeChild(*vecBiontIt, false);
                    }
                    pLayer->addChild(*vecBiontIt, zOrder);
                }
            }
        }
    
        m_pParentLayer = pLayer;
    }
    
    CBiont* CBiontCache::getBiontById( int nId )
    {
        for (map<int, vector<CBiont*> >::iterator it = m_mapVecBion.begin(); it != m_mapVecBion.end(); it++)
        {
            for (vector<CBiont*>::iterator vecBiontIt =  (it->second).begin(); vecBiontIt != (it->second).end(); vecBiontIt++)
            {
                if ((*vecBiontIt)->getId() == nId)
                {
                    return *vecBiontIt;
                }
            }
        }
    
        CCLog("error: CBiontCache::getBiontById");
        return NULL;
    
    }
  • 相关阅读:
    Java通过JNI调用C/C++
    Using HTML5 audio and video
    vmstat输出项解释
    uva 11237
    NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降
    认识与学习bash
    系统崩溃,大圣归来
    连载《一个程序员的生命周期》-25.到工业现场学习业务知识引发的思考
    ZOJ问题(2010浙江大学研究生复试上机题目[找规律] hdoj 3788)
    UIView的几个枚举定义
  • 原文地址:https://www.cnblogs.com/newlist/p/3163812.html
Copyright © 2011-2022 走看看