您的位置:首页 > 移动开发 > Cocos引擎

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

2017-08-31 17:19 344 查看
--------------------模型:通过场景判断,可以判断前一个场景是否被析构--------------

思维扩展:

利用一个专门的类,来管理 获取“对象是否被析构”

此游戏的场景,就相当于一个标志

【多线程一定要注意共享变量的运用,特别是在一个线程中将变量释放,而在另一个变量中调用,会导致崩溃】

模型思考:

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:
SenceStatusm_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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: