实体对象的设计(一)

项目开发日志(九)

在我参与的项目中的实体管理系统据说经过了很多游戏的磨练,本身已经很复杂,我只能记录我的理解,可能在往后的日子里有更深入的理解后会修改下面的一些认识.关于实体系统我可能会分比较多的部分来慢慢说,目前能想到的内容会有:实体对象的设计原则与继承关系,实体对象的属性分配,实体对象的消息.

  • 游戏实体对象

游戏实体系统在游戏编程系列著作< 游戏编程精粹四>中提及.以下摘抄一小段:


现代游戏充满各种各样的实体,玩家,敌人和发射的炮弹.这些要素在游戏世界里乱哄哄的跑来跑去,地形,建筑物,天空和云彩的定义环境.路径点(waypoint),触发器和脚本指导玩家体验.得分,破坏和无力方面组成游戏世界的逻辑和规则.不是对所有东西分别对待,作为特殊目的的要素,把他们结合为一个系统并且提供一个公用的结构和通信方法是很方便的,基于消息的方法来管理实体能够解决很多问题并提供一种方法统一大部分的关键游戏要素 – 摘自< 游戏编程精粹4> 第58页


项目中游戏实体的设计主要是遵循MVC模式,一下内容简单温习MVC:

  • 软件架构之MVC模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

控制器Controller– 负责转发请求,对请求进行处理。

视图View) – 界面设计人员进行图形界面设计。

模型Model – 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

mvc

以上内容摘自维基百科

我们在设计实体对象的时候必须有MVC的分离.由于实体对象是整个游戏所有对象的基础.所以对MVC的周全考虑会让整个游戏开发过程显得非常轻松.

  • 实体对象整体模型

为了实现MVC分离,在项目中把游戏实体对象设计成如下:

GameEntiy

实体对象主要由M部分组成,V(组件)部分,C(部件)部分 都是根据对象的具体类型来确定是否加在实体上.例如:

  1. 游戏实体对象是物品,则仅有可视化组件,移动组件,和物品相关部件.
  2. 游戏实体对象是怪物,则应该有可是组件,移动组件,和挂了战斗部件,技能部件等.

就像是一个庞大的蜜蜂家庭,都是蜜蜂,但是有的蜜蜂负责外出采蜜,有的蜜蜂负责和蜂王交配.而蜂王负责生殖.可能比喻得不太恰当 但是把游戏中所有实体都归为到一个系统中的目的是使得游戏世界拥有强大的简单性与为后面通过消息来控制实体提供可行性.

  • 实体的继承体系

ISL_Entiy

目前有的游戏实体继承关系如上图,各个类的功能不同:

  1. ISL_Entity 实体基类,所有游戏实体都继承于它,它有自己的基本属性
  2. ISL_WorldObject 世界对象,所有继承这个类的对象 都可以进入世界(场景)
  3. ISL_Chunnel,传送门对象,在场景中属于世界对象
  4. ISL_Box,宝箱对象,在场景中属于世界对象
  5. ISL_Unit,生物对象,在场景中,继承这个类的所有对象 都属于游戏世界中的生物.例如怪物 玩家 NPC等.
  6. ISL_Goods物品对象,所有继承这个类的对象都属于物品范畴,药品,装备,背包里的所有东西等.

实体对象的设计原则与继承关系的阐述到此为止,下一话将谈谈实体对象的属性分配.

发表评论

邮箱地址不会被公开。 必填项已用*标注