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;
思维扩展:
利用一个专门的类,来管理 获取“对象是否被析构”
此游戏的场景,就相当于一个标志
【多线程一定要注意共享变量的运用,特别是在一个线程中将变量释放,而在另一个变量中调用,会导致崩溃】
模型思考:
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;
相关文章推荐
- cocos2d-x 场景切换管理
- 作为产品经理,你需要思考这5大思维方式
- cocos2d-x开发: 场景实体(entity)管理
- 质量、管理、设计思维的本质是方法论和思考的技术,整理了一份书单列表,欢迎大家参考,尤其是红色字体的经典。学无止境,同志尚需努力!
- cocos2d-x源码剖析之场景管理
- 质量、管理、设计思维的本质是方法论和思考的技术,整理了一份书单列表,欢迎大家参考,尤其是红色字体的经典。学无止境,同志尚需努力!
- 技术走向管理一些思考(2)-建立管理思维
- cocos2d-x中的场景管理
- 技术走向管理一些思考(2)-建立管理思维
- 阶段论,产品化思维与管理模式的思考
- cocos2d-x(2):场景管理函数切换管理基础学习
- Redis作为消息队列服务场景应用案例
- Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件
- 怎样使项目中的cocos2d默认模板支持ARC内存管理
- cocos2d-x初探学习笔记(5)--动作管理
- (贯穿全栈,小型产品,体会流程,工具学习,思维引导)作为程序猿快速执行前期产品原型设计以及项目开发流程纪录。。更新中
- cocos2d-x中场景之间的切换
- [cocos2d-x]动作+场景切换
- [置顶] [cocos2d-x]从源码角度思考convertToWorldSpace()与convertToWorldSpaceAR()坐标系的转换
- 技术走向管理一些思考(6)-推进项目