设为首页 加入收藏

TOP

利用HGE引擎设计的角色部分 (四)
2014-11-24 00:40:17 来源: 作者: 【 】 浏览:106
Tags:利用 HGE 引擎 设计 角色 部分
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。有了这个类型标示 那么就可以很轻松的获取各种角色对象了。


摘自 游戏的天空
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个C笔试题引出一系列的问题 下一篇深入浅出C指针(一)基本概念

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: