buffer设计

游戏中存在各种各样的buffer状态给玩家增强属性或者消减属性 本人 大体设计buffer如下:


在state.h / state.cpp 真正buffer对象的文件


class CBuffer:public IStateInfo //所有的buffer都继承自 IStateInfo

{

public:

CBuffer{}

~CBuffer{}

public:

virtual OnAdd(CState*);//实施具体加buffer操作发消息给客户端显示buffer增加玩家属性等

virtual OnDel(CState*);//告诉客户端删除buffer 并恢复玩家属性

virtual OnLoad(CState*){};

virtual OnTrigger(CState*);//定时器 定时处理buffer状态

protected:

virtual bool OnLoadProperty( XCmlCfgLoader &){return true;} //额外配置需要

}

///

class  IStateInfo

{

//此类主要是读取配置中buffer 的基本属性

virtual void OnAdd( CState* ){}

virtual bool OnTrigger( CState* ) = 0;

virtual void OnDel( CState* ){}

virtual void OnLoad( CState *pState )

{

OnAdd(pState);

OnTrigger(pState);

}

}

///

//可以当做接口类

class CState

{

//定义了一些与外界相关的数据 比如说技能属性指针 还有 本身的 buffer 属性指针等信息

void OnCreate()    //重载

}

///

//buff管理类 静态的

class CStateMgrImpl

{

bool Init(); //初始化所有buff的信息填充IStateInfo指针并且存进map里面

CState* CreateState( string statename , IBiology *pBiologyHolder , IBiology *pCaster )

}

读配置:

IStateInfo *CStateMgrImpl::CreateStateFromXML()

{

stStateTable *pItem = std::lower_bound( StateTable , StateTable+_countof( StateTable) , iType)

IStateInfo *pStateInfo = pItem -> CreateObject();

pStateInfo->LoadProperty();

return pStateInfo; //构造出了buffer信息 

}



里面配置的一个数据结构 看起来挺高端的

struct stStateTable

{

enStateType eType;

IStateInfo* (*CreateObject);

}


template<class State>

static IStateInfo* CreateStateObject(){ return new State() ; }


typedef enum enStateType

{

enStateAddHpm = 1, //buff Typeid

}



stStateTable StateTable[]=

{

enStateAddHpm, &CreateStateObject<CAddHPState>}, //枚举 -》 具体buffer类型

}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值