buffer设计

来源:互联网 发布:c语言数字后面加u 编辑:程序博客网 时间:2024/06/10 22:40

游戏中存在各种各样的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
原创粉丝点击