t& _object);
//获取角色-根据ID来获取 FGRoleObject* GetRole(short id);
//货物角色id从list中 short GetIDFromeList(short index);
//获取我方阵营人数 short GetMyRoleNums();
//获取敌方阵营人数 short GetEnemyNums(); protected:
private: list listobject;
list::iterator iterobject;
FGRoleManager(void);
static HGE* hge; };
FGRoleManager.cpp文件:
HGE* FGRoleManager::hge = NULL;
FGRoleManager* FGRoleManager::mangner = NULL;
FGRoleObject* FGRoleManager::CurRole = NULL;
FGRoleManager::FGRoleManager(void){
}
FGRoleManager::~FGRoleManager(void){
} void FGRoleManager::Logic(){ //所有角色各自运行自己的逻辑 for(iterobject = listobject.begin();iterobject!= listobject.end();iterobject ) { (*iterobject)->Logic(); }}
void FGRoleManager::Render(){ //所有角色各自运行自己的绘制 for(iterobject = listobject.begin();iterobject!=listobject.end();iterobject ) { (*iterobject)->Render(); }}
void FGRoleManager::AddRole(FGRoleObject& _object){ //加入角色对象 listobject.push_front(&_object);
//加入角色id listid.push_back((&_object)->GetID());
}
void FGRoleManager::DeleteRole(FGRoleObject& _object){ if(listobject.empty()) return; listobject.remove(&_object);}
short FGRoleManager::GetMyRoleNums(){ short temp = 0;
for(iterobject = listobject.begin();iterobject!=listobject.end();iterobject ) { if((*iterobject)->GetCamp() == PLAYER) { temp ; } } return temp; }
short FGRoleManager::GetEnemyNums(){ short temp = 0;
for(iterobject = listobject.begin();iterobject!=listobject.end();iterobject ) { if((*iterobject)->GetCamp() == ENEMY) { temp ; } }
return temp; }
FGRoleObject* FGRoleManager::GetRole(short id){ for(iterobject = listobject.begin();iterobject!=listobject.end();iterobject ) { if(id == (*iterobject)->GetID() ) { return *iterobject; } }
return NULL;}
short FGRoleManager::GetIDFromeList(short index){ int tempindex = 0;
for(iterid = listid.begin();iterid!=listid.end(); iterid ) { if(tempindex == index) { return *iterid; } tempindex ; }
return 0;}
此设计运用了继承和多状.在管理类(FGRoleManager)里有一个基类(FGRoleObjetct)的list 来存放子类对象,通过list来统一管理子类对象.
下面我写下自己的一些设计想法:
基本类FGRoleObject:
类成员:
只允许写游戏角色拥有的属性:比如hp mp x y(角色的坐标)等
说明:为了让此类更加的通用,何为通用呢?就是这个类可以适用于任何游戏,在编写任何游戏的时候都可以拿来使用,由于制作游戏的引擎不一样,那么绘制的处理也会不一样,因此基类的成员里只能写整个游戏角色所需要的属性变量。
类成员函数:
游戏角色通用的行为,比如碰撞处理,属性的设置等等 ,没 个角色必须得用的上的。
子类FGMyRole:
此类里的成员,可以加入角色的一些特有的变量,根据不同的引擎的绘制处理机制不同,对应不同的资源对象,比如在这个类的 采用 的是hge的动画对象来绘制角色,那么成员里就可以加入动画类的对象,另外角色还装备系统,自然也要加上管理装备的数据结构,这里是用一个一纬数组。
整个角色的管理类 FGRoleManager:
此类利用list角色基类指针的连表来管理角色的每一个对象 成员方法主要实现整个游戏的角色的添加,删除,通过编号来获取某个角色等等。此类采用单件模式,整个游戏里只有一个角色管理对象,次对象管理NPC 我放,敌方,中立等角色。这些角色可以全部加入到list连表里统一管理,比如统一绘制,统一逻辑等等。由于连表里存在不同类型的对象,那么就必须得有一个种类的标示,此类里用了一个种类的enum枚举 目前只写了我方阵营类型 和敌方阵营类型 后面还回有中立的类型,比如npc。有了这个类型标示 那么就可以很轻松的获取各种角色对象了。
摘自 游戏的天空