cocos2d场景管理之思考-----拓展,借助其思维作为全局的标记

xiaoxiao2021-02-28  76

--------------------模型:通过场景判断,可以判断前一个场景是否被析构-------------- 思维扩展: 利用一个专门的类,来管理 获取“对象是否被析构” 此游戏的场景,就相当于一个标志 【多线程一定要注意共享变量的运用,特别是在一个线程中将变量释放,而在另一个变量中调用,会导致崩溃】 模型思考: GameSceneA  GameSceneB GameSceneC HallScene enum SenceStatus { enSenceStatus_Null, enSenceStatus_Logon, enSenceStatus_Hall, enSenceStatus_Bank, enSenceStatus_Room, enSenceStatus_Game, enSenceStatus_BackGround,     enSenceStatus_Record, }; /* * 场景管理类 */ class SenceManager : public YJSingleton<SenceManager> { friend class YJSingleton < SenceManager >; private: SenceStatus m_SenceStatus; private: SenceManager(); ~SenceManager(); public: //设置当前场景 void SetCurrentSence(SenceStatus enSenceStatus); //获取当前场景 SenceStatus GetCurrentSence(); }; SenceManager::SenceManager() { m_SenceStatus = enSenceStatus_Null; } SenceManager::~SenceManager() { } //设置当前场景 void SenceManager::SetCurrentSence(SenceStatus enSenceStatus) { m_SenceStatus = enSenceStatus; } //获取当前场景 SenceStatus SenceManager::GetCurrentSence() { return m_SenceStatus; } 【通过SenceManager::getInstance()->setCurrentSence() 来设置当前场景,这个场景就可以作为一个标记】 【 值 ----与   当前场景是否被释放    具有关联性                               】 【替代使用全局静态变量来作为标记,在析构函数中改变标记的值】 扩展为通用型; enum FlagStatus{ enNull, enA, enB, enC, enD } class Flag{ public: static Flag * m_pFlag; static Flag * getInstance(){  if(m_pFlag==nullptr) { m_pFlag=new Flag(); } return m_pFlag; } private: FlagStatus m_enFlagStatus; public: void  SetCurrentFlag(FlagStatus enFlag){m_enFlagStatus=enFlag;} FlagStatus GetCurrentFlag(){return m_enFlagStatus;} } Flag* Flag::m_pFlag=nullptr;
转载请注明原文地址: https://www.6miu.com/read-47632.html

最新回复(0)