--------------------模型:通过场景判断,可以判断前一个场景是否被析构--------------
思维扩展:
利用一个专门的类,来管理 获取“对象是否被析构”
此游戏的场景,就相当于一个标志
【多线程一定要注意共享变量的运用,特别是在一个线程中将变量释放,而在另一个变量中调用,会导致崩溃】
模型思考:
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;