数据驱动设计

显然,在当今的游戏和虚拟现实系统中,为了将重复性工作降到最低,同时也为了提高扩展性,应该将逻辑和数据分开。逻辑部分定义引擎的核心原则和算法,而数据部分则提供其内容和行为的具体细节。

      这其实与类的思想有些相似。逻辑对应于类的函数,数据对应于类的变量。通过将“变量”抽象出来,“函数”能够处理更多不同的情况,更具备普适性。游戏数据应该从外部文件载入,而不应该内嵌在代码中。

      然而如何把握逻辑和数据的平衡不是一件容易的事情,因为他们之间的界限是模糊的。谨记以下6点,能有效的帮助我们处理逻辑和数据的关系。

1、 数据解析引擎

      在开发阶段,为了帮助测试和设计人员有效的测试游戏,需要将数据以文本的形式保存,方便他们修改,在做新尝试的同时减轻程序员的工作量。这时需要一个实时的文本形式的数据解析引擎。然而在游戏最终交付版本中,需要以二进制的形式来存取数据。那时需要对数据解析引擎进行修改。

2、 数据的标准

      哪些数据可以被抽象出来,以外部文件的形式保存呢?除了通常意义上的地形、模型、贴图纹理等,还应包括常量数据、行为数据等。例如摄像机的定位和朝向、雾的浓度和深度等。

3、 杜绝硬编码

      硬编码是指用代码形式来编写,将目标写入程序,不容易进行更改。但是现代的编程思想中,在程序设计上,要尽量将游戏的核心部分抽象出来,即把具有相同属性和功能的对象归纳成通用的组件,从而避免对每一个单一目标进行设计。这实质上也是避免重复性的要求体现。例如,当游戏采用两个种族时,一种方式是针对两个种族分别编写代码;第二种是抽象出种族的共有属性,并将其暴露在外部数据接口中。第一种方式繁琐,重复人工;第二种方式方便改变新行为,添加新种族。

4、 脚本与代码

      除了通常意义上的数据,逻辑行为也可以被看作一种数据,写进脚本文件,从而驱动游戏的动态发展。然而并非所有的逻辑行为都适合编写进脚本。因为脚本是提供给非程序员进行测试使用的,如果将脚本变成复杂逻辑的集合,会增加他们的难度和工作量。同时脚本引擎的编写也会耗费大量时间。因此,建议如果逻辑太复杂,应该放在代码中,由程序员来完成;脚本语言需要保持简洁。

5、 避免重复数据

      避免重复性,是编程实践的标准,也是面向对象编程的驱动力之一。与类代码相似,数据也可以具备继承性。在引用基本数据块的基础上,添加新的数据内容,并适度进行改变,能够创造出既具有共性特征,同时又有个性属性的目标。

6、 数据开发工具

      随着游戏程序规模的扩大,文本形式的数据文件变得不易控制和处理。此时就需要一个可视化的工具来编辑修改,例如游戏编辑器、关卡编辑器或脚本编辑器等。比较所节省的时间,这额外工具开发所耗的时间是值得的。而且它与核心程序的数据解析引擎可以是一致的。

      在游戏开发中,交互、数据和逻辑控制需要相互独立,才能降低代码的耦合性。因此数据驱动成为必然要求。在划分数据和逻辑的界限时,一个关键性的原则就是尽量减轻程序员和测试人员的工作量。如果改变有限的属性就能增加程序多样性,那么这些属性应该成为数据文件,交给测试人员;如果需要复杂逻辑判断和递归,那么就应该交给程序员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值