CocosCreator组件化开发(二):数据驱动

转载请保留原文链接:https://blog.csdn.net/zzx023/article/details/84588609

 

数据驱动是什么?可以用一句话总计:把知识叠入数据以求逻辑质朴而健壮

        

1、 为什么选择数据

这里解释一下,对于正常人而言,即使最简单的程序逻辑让人来理解也很困难,比如说一些条件的嵌套,while,for等等流程上的控制。而对于数据或者说是图标,人们往往很容易找到数据中的规律或是脉络。即便是很复杂的数据,我们还是可以相对容易地推导和建模。

举个例子,当你有50个需要衔接的动画需求时,就是看一连串的cc.sequence和cc.action的代码方便,还是50行动作配置表方便?

可能这里会有杠精开杠:“作为一个程序员,我觉得代码比表格更容易理解”。不好意思,对于这种问题,我的回答是:你只是凭借着经验理解了其中的逻辑关系,但一开始学习代码时,是否是表格中的数据或者是流程图这些会让你更加清楚明了?

所以数据要比编程逻辑更容易驾驭。因此如果要在复杂数据和复杂代码中选择一个,宁愿选择前者。在设计中,我们更应该主动将代码的复杂度转移到数据之中去

 

2、什么是数据

Ui、声音、图像、文本、二进制数据、文件、对象、数组、xml数据、json数据、模块、组件、数据库数据……,这些其实都是数据。

数据可以是连续的一串值,也可以是符号、文字等等。

它是我们程序当中的原始素材,我们通过对原始素材进行再加工、组装等形成我们的程序。

传统思维下,我们可能会误认为数据指的就是那些配置好的表格文件(xml、json文件等)。实际上这种理解是很狭义的。

 

3、什么是数据驱动

数据驱动是一种设计方法,是一种设计思维,我们在开发时,往往关注于具体的功能点、一段具体的代码、单个系统,而往往忽视了数据结构的重要性,这样无法很好的应对需求功能变更。

数据驱动从数据开始,数据在前面,一旦数据发生变更,对应的算法、界面、显示等均可以改变。

 

 

关于creator中的数据驱动可以参考:

https://docs.cocos.com/creator/manual/zh/getting-started/cocos2d-x-guide.html#2-%E6%95%B0%E6%8D%AE%E9%A9%B1%E5%8A%A8

 

         以上官方文档是关于数据驱动在整个编辑器架构中的引擎,至于实际项目当中具体的例子可以参考上一篇当中关于动画的例子。

 

动画也是我们数据的一种。通过改变动画数据,我们可以产生不同的表现。再进一步,我们通过改变动画数据中的帧事件数据,可以产生不同的游戏逻辑。

 

再看我们的场景管卡配置表,这也是传统的数据驱动的使用例子:

CocosCreator组件化开发(二):数据驱动_第1张图片

当然这还是简单一些的配置,实际项目中可能还会加上一些字段,例如x轴位置信息,增加概率,图片资源随机选择,是否需要描边……

通过改变数据,我们可以在游戏中显示出不同状态的鱼。

如果忽略这些数据,你可能需要在代码中写出一个个的函数用于执行各种各样的runAction、setSpriteFrame、setPosition等方法。当外部需求变更时,需要去对相应的代码进行修改和删减。整段代码中也有可能充斥着各种if…else..,switch等。

这样的代码应对变化的能力相当的弱,这也就是我们常说的健壮性不够。

 

而通过数据驱动的方式就为我们带来了几个好处:

  1. 控制复杂度。我们最开始有说过,把复杂的代码结构变成复杂的数据结构,从而通过美术以及策划的“专业的数据”处理能力帮助我们完成复杂的游戏开发。
  2. 隔离变化。每段代码都是固定不变的,变化的只是数据,通过数据的变化控制逻辑的分支。将数据与逻辑分离开来。
  3. 机制和策略的分离。这一点和第二点有点类似,策略就是控制逻辑的分支,而机制就是一些固定的处理逻辑,把逻辑代码进一步进行切分,分为流程控制代码与逻辑处理代码,这样的代码将会干净很多,整个逻辑也会更加清晰。

你可能感兴趣的:(CocosCreator)