.GAME FRAMEWORK

开始用.NET构建我们梦想中的游戏

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上次说到“场”和“环境”,这两个概念似乎有人能够接受,那么我就继续将另外三个概念:“规律”(GLaw)、“动作”(GAction)和“规则”(GRule)。

“规律”呢,其实很简单,就是一些物理规律,主要就是一些公式,比如说两个质量分别为m1和m2的物体以v1和v2的速度和夹角a进行对碰,会对这个物体产生什么样的影响。或者一个质量为m,发动机噪声系数为beta,基础频率为h,当前输出功率为p的物体会对声场产生什么样的影响。为什么需要一个GLaw呢,因为整个的游戏世界里面可能会有很多的规律,这些规律如果做在了地图上,那么地图就是死的,如果规律做在了环境上,那么这个环境就是死的。那怎么做才能够让框架更有灵活性呢?GLaw就是我的解决方案:所有规律计算相关的代码都放到一个从这里派生出来的变量,然后注册到游戏世界里面,游戏世界就会自动应用所有的规律。主要就是剥离规律。

同样的,动作也是需要剥离的。大家可以参考一下Terrarium或者SC,一个活动的对象会有好几种Action,比如说Move、Stop、Fire(Attack),上面这三种是Terrarium和SC都有的,但是SC里面没有eat,Terrarium里面没有Repair、Hold、Patrol,在GLiving上面仅仅定义Move、Stop、Fire这些最基本的呢?还是把Repair、Hold、Patrol、Eat都定义上去呢?后者显然不可行,因为你考虑的肯定不是最完整的。比如说传奇里面肯定还会有Say、Pick、Motion等等其他的动作,那你是否也把这些考虑进去呢?那么仅仅定义最基本的甚至不定义,由最终开发人员进行设计是否可以呢?理论上是可以的,而且实际上如果我们不是讨论一个框架而是讨论一个具体的游戏,那么肯定也是这样子的。问题是,这不是我们的目标。为什么这么说呢?因为我们的目标是让最终开发人员减轻负担,甚至是普通玩家都能够进行设计,那么我们就需要帮他们去考虑更多的问题。比如说,一个动作必然涉及主语、谓语、宾语三个关键要素,此外至少动作完成了之后需要知道完成的情况。如果可能的话,某个动作也许是“被计划”的,也就是不是立即发生的,那么当他发生之前那一瞬间,最好能够有一种机制取消这个动作。比如说你用鼠标点击一个范围以外的敌人进行攻击,那么就相当于执行了一个Move动作,以及计划了一个Attack动作。如果这个敌人在你到达之前突然和你结盟了,那么这个Attack动作是否需要在Attack之前考虑一下是否仍然可以被Attack?此外还有“计划”一个动作等等其他问题,这些功能都是可能需要的。那么我们就应该把这些东西封装起来,使任何一个动作都具有一些标准的能力。封装起来还有另外一个好处:

大家看一下Terrarium,里面的动物有如下函数(相当于事件):OnLoad, OnIdle, OnMoveCompleted, OnAttacked, OnAttackCompleted, OnDefendCompleted, On...,一大堆的东西,非常的麻烦!如果所有的东西都放在了Action里面,那么情况就变得清晰了:在GLiving里面提供一个ExecuteAction,参数是一个GAction,GAction里面提供主谓宾三要素,同时提供相应的BeforeAction/AfterAction事件(如果需要的话),然后在GAction.onAction函数当中编写这个动作的执行代码(例如根据主宾双方的情况计算应当扣除多少的生命值等等),把执行(状态)结果放在GAction.Result里面。另外GLiving里面提供一个BeActioned事件,参数是GLiving(也可能最终会修改成GGameObject,表示主语)和GAction,如果激发这个事件表示有人对this执行了一个动作,这个时候相应的选择一些提前的处理方式。

现在出现了另外一个问题:有了GAction并不代表所有的宾语都能够接受这个动作,也不可能所有的主语都能够发出这个动作。那么我们就需要一个东西去描述一些限制,GRule就用来完成一个功能。当然,GRule的作用并不仅仅在于限定主谓宾的接受情况,甚至不在于限定动作,还有可能限定一些其他的东西。这个GRule具体还有什么作用暂时还没有想清楚,主要应该是考虑一些合理性和安全性的问题。

这次也就说这么多了,大家有什么意见和想法,请告诉我。目前我正在搭这个框架,等dudu他们解决了sf.net的问题,我就把我的设计摆上去,随时更新。目前暂时没有办法提供给各位了,也许明天我会把我目前所写到的类的继承树Post出来,给大家一个参考,也好让大家给我一个参考。
posted on 2004-05-17 22:29  我们的游戏世界  阅读(1306)  评论(3编辑  收藏  举报