在游戏行业也快6年了,这几年一直用cocos引擎 和lua 做客户端的开发,六年的时间不算短了,我觉得是时候写些东西总结一下啦。
首先,我从游戏开发技术的角度总结了四种境界。
第一种境界,初级游戏开发,就是懂一些基础的东西,会做一些基础的界面,逻辑。这个境界适合于刚毕业1-2年的同学。刚毕业的同学,知道有个 cocos引擎,会用,知道怎么画个图片,建个场景,实现一个动画等等。这个时候,因为对引擎的认识不全面,在实现策划提出的一些功能时,会用到一些非常非常绕的方法来实现,写出的代码也相当的奇葩,而且写代码时,也只考虑快点实现功能,至于bug,代码效率什么的就没有想过。比如,叫一个初级的同学写个在十张牌里抽3张牌出来的功能,很可能他的直觉会这样写,先将10个牌放一个数组,然后从1-10随机出一个下标,这样就抽子出了一个牌,随机第二个下标,这就是第二个牌...然后随机第三个下标,这样就抽出了3张牌啦, so easy ,但是,等等,这里面是不是有些什么问题,比如第二次承机出来的下标和第一次的一样或者第三次承机出来的下标和前面的二次一样,怎么办?这个,好像是啊,那这样,写个for循环,第二次随机出下标和第一次对比,如果一样的话,就继续随机下去。哇,好像可以解决问题了,但是,要是要是每次都随机到一样的下标,这个for循环岂不是死循环了?你傻逼啊,怎么可能每次随机数都一样嘛,想想就不会发生这种事情,你说你一个高级程序员,好像真的被一个初级程序员说得口哑了,事实上他又说得对,这个for循环肯定会被跳出来的,因为真的没有二个随机数会一样的啦,但是,如果上面的功能是要从100张牌里面抽99张,到第99张时,这个随机数和前面相同的概论就非常非常的高了,这种做法完全就是个bug!哦,是bug咩?这个用例里面不是啊,你只是从10个里面取3个,我这样没有问题啊,好吧,这个真的是初级游戏开发,思维里面还没有效率和鲁棒性的概念。
第二种境界,中级游戏,就是已经懂得一些比较正确写代码的思路了,写代码时,开始考虑了一些可能出现的问题,以后要扩展之类的问题。写代码前,会懂得看一下别人是怎么写的。还是举之前的例子,从10个里面抽3张牌,中级的游戏开发,可能不会再用数组,而是用一个集合,随机的在这个集合同里面找一个出来,然后删除,这样操作三次,找出三个,很好,功能没有问题,实现代码用到了集合这种数据结构,大部分语言都有支持,总之,中级程序员已经能完比较完整的实现策划的功能,不用担忧他会定写出bug了,而且还考虑到了效率。
第三种境界,高级游戏开发,这个已经是非常的熟悉游戏开发的各种套路啦,什么背包系统,什么装备,什么攻防血法,什么升级进阶转生,什么rts,rpg,mmrpg,回合战斗,策划想做啥就能做啥出来。即使是没有做过的新系统,也能设计出一套系统出来,内存的优化,网络的优化,什么 cocos 缓存,draw call等都非常的熟悉了。还是以抽牌为例,从10个里面抽3个这种问题,什么?太简单了吧,知道什么叫洗牌算法吗?将1-10个数随机交换一下位置,效换完,取前面三个数,就是要抽的牌了,你要抽多少个都是随机的。根本无需集合什么的。
第四种境界,资深专家级游戏开发,这个境界的程序员,要对引擎非常的熟悉,已经是写地图编辑器,UI控件, 炫酷 shader 之类的人物了,什么,你叫我写抽牌的功能?走一边去,这种东西是老子写的吗?
上述就是我总结出来的游戏开发的四种境界,第一种境界的入门书太多了,随便找本20天精通cosos就能到达。第一种到第二种境界也非常的容易,只要写够一年代码,平时注意一下cocos高级编程之类的博客,基本轻松到达。第三种到第四种境界,主要区别在少了引擎方面的知识,现在市场上面也非常多引擎相关的书,什么 openGL 宝典,光照模型,引擎架构之类的,只要你愿意,会找到非常多这方面的知识。
但从第二种到第三种境界,现在网络上面比较少这方面的资料,除了 drawcall,内存,缓存优化之类的引擎相关的有一些技术文章外,其它的知识点好像除了通过积累开发经验之外,并无其它的捷径。比如,策划叫你写个背包系统,写个回合制的战斗系统,怎么办,以前没有写过啊,周围也没有人可以教导,只能硬着头皮,上 github上面搜一下,看看有没有相关的资源,抄一个,东改西改下。这个时候,如果一开始有人指导一下这些通用的功能系统开发技巧,可能就会省下很多搜索的时间。
所以,我打算写一系列的文章,总结自己这几年来的一些经验,提供给正处于第二个境界的同学,在进入游戏行业二年后,通过我的文章,能够获得一些游戏开发中的奇技淫巧,快速的领悟到高级境界,早点成为一个高级的游戏开发人员。本系列文章只限于 cocos2d+lua 开发的同学,用其它引擎和脚本做开发的,可能帮助不大,因为都是和语言引擎硬相关的淫巧。