天龙源码分析 - VariableSystem

VariableSystem是天龙的全局变量系统,使用的最大好处除了可以统一保存在文件中外,还可以统一管理全局变量,防止全局变量满天非的问题。

实现方式:

一 变量定义

     struct  VARIABLE
    {
        STRING    vValue;    
// 变量值
        BOOL    bTemp;     // 临时变量
    };
#ifdef __SGI_STL_PORT
    typedef std::hash_map
<  STRING, VARIABLE  >     VARIABLE_MAP;
#else
    typedef stdext::hash_map
<  STRING, VARIABLE  >     VARIABLE_MAP;
#endif

 

 

可见变量是放在hash里面的,这样可以加快查找

二 变量保存 

  // 当前保存的变量
 VARIABLE_MAP  m_mapCurrent;
 
// 游戏退出时更改并保存的变量,以便下一次游戏启动生效
 VARIABLE_MAP  m_mapNeedSave;

 

用处我就不介绍了,写的很清楚

实现方法就是:m_mapCurrent和m_mapNeedSave变量保存时,都会保存在同一个文件里面,下次游戏加载时,保存在游戏里面的变量都会加载到m_mapCurrent变量里面,就可以实现《游戏退出时更改并保存的变量,以便下一次游戏启动生效》

 

三 加入和取变量

     // 得到某个变量的值,如果不存在,则返回FALSE
     virtual  BOOL    GetVariable(LPCTSTR szName, STRING &  strValue)        ;    
    
// 设置某个变量的值,如果不存在,则首先创建
     virtual  VOID    SetVariable(LPCTSTR szName, LPCTSTR szValue, BOOL bTemp = TRUE, BOOL bFireEvent = TRUE)    ;
    
// 设置某个变量的值,但并不马上生效, 下一次启动时才会生效
     virtual  VOID    SetVariableDelay(LPCTSTR szName, LPCTSTR szValue)    ;

    
// -------------------------------------------------------------------
    
// 快速设置通道

    
// 整数
     virtual  VOID    SetAs_Int(LPCTSTR szName, INT nValue, BOOL bTemp = TRUE)                ;
    
// 浮点数
     virtual  VOID    SetAs_Float(LPCTSTR szName, FLOAT fValue, BOOL bTemp = TRUE)            ;
    
// Vector2
     virtual  VOID    SetAs_Vector2(LPCTSTR szName, FLOAT fX, FLOAT fY, BOOL bTemp = TRUE)    ;

    
// -------------------------------------------------------------------
    
// 快速获取通道

    
// 字符串, DEF=""
     virtual   const  STRING &     GetAs_String(LPCTSTR szName, BOOL *  bHave  =  NULL)    ;
    
// 整数, DEF=0
     virtual  INT                GetAs_Int(LPCTSTR szName, BOOL *  bHave  =  NULL)        ;
    
// 浮点数, DEF=0.0f
     virtual  FLOAT            GetAs_Float(LPCTSTR szName, BOOL *  bHave  =  NULL)        ;
    
// Vector2, DEF=(0.0f, 0.0f)
     virtual  fVector2        GetAs_Vector2(LPCTSTR szName, BOOL *  bHave  =  NULL)    ;

 

注:现在有个疑问,为何整数和浮点数都会保存在字符串里面,用的时候在把字符串还原过来,这样岂不是有开销,目的何在?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值