角色属性的存储结构

版权声明:转载请注明 https://blog.csdn.net/hl1991825/article/details/84140480

rpg项目中角色属性多种多样,策划脑洞多大,属性就有多少种.所以用一个变量存一条属性这种方式在项目中肯定会被老大骂(当然小游戏无所谓了).

不可取:

public class ActorData{
    public int Hp;
    public int Mp;
    public int Def;
    ...
}

要保证灵活和扩展性,我使用了字典的方式存储

定义属性枚举

public enum PropTag{
    Hp,    //血量
    Mp,    //蓝量
    Def,     //防御
}

现在属性类可以写成这样

public class ActorData{
    public Dictionary<PropTag,int> m_PropDatas = new Dictionary<PropTag,int>();

    //设置属性
    public void SetPropData(PropTag tag,int val){
        if (m_PropDatas.ContainsKey(tag)) {
           m_PropDatas[tag] = val;
       } else {
           m_PropDatas.Add(tag, val);
       }
    } 

    //获取属性
    public int GetPropData(PropTag tag){
        if(m_PropDatas.ContainKey(tag)){
            return m_PropDatas[tag];
        }
        return 0;
    }

    //属性增加
    public void AddPropData(PropTag tag,int addVal){
        int oldVal = GetPropData(tag);
        SetPropData(tag,oldVal+addVal);
    }

    //属性减少
    public void SubPropData(PropTag tag,int subVal){
        int oldVal = GetPropData(tag);
            SetPropData(tag,oldVal-subVal);
    }

    //属性是否存在
    public bool PropTagExist(PropTag tag){
        return m_PropDatas.ContainKey(tag);
    }
}

猜你喜欢

转载自blog.csdn.net/hl1991825/article/details/84140480
今日推荐