zoukankan      html  css  js  c++  java
  • 天龙源码分析 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)    ;

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

  • 相关阅读:
    Elastic Search查询DSL的生成器
    清除Git仓库未托管的文件
    在Asp.net Core 中配置HTTPS支持
    VUE3的新构建工具Vite使用简介
    文档驱动 —— 表单组件(六):基于AntDV的Form表单的封装,目标还是不写代码
    文档驱动 —— 查询组件:使用 vue3.0 的新特性,重构代码
    文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。
    文档驱动 —— 表单组件(四):基于Ant Design Vue封装一些表单域控件
    文档驱动 —— 表单组件(三):基于原生html的表单组件demo
    文档驱动 —— 表单组件(二):meta生成器,告别书写代码
  • 原文地址:https://www.cnblogs.com/dieangel/p/3326935.html
Copyright © 2011-2022 走看看