实习参与的手游:悟空别走开

Posted by SlothSimon's Skytree on July 17, 2016

简介

pic1 pic2

悟空别走开-九游游戏专题 悟空别走开ios 大四(2014)开始参与了游戏的开发,从最开始连个主界面都没有,到后来有了Demo找代理,几乎就是一个从无到有的过程,打个比方的话,就是从根本不会游泳到后来狗刨几下能前进了。

《悟空别走开》(原名《妖精小镇》)以《西游记》中的人物、剧情为引,构建了一个“后西游”世界。游戏模式以策略、战棋系统为主,以美食经营系统为辅。 pic3 安卓版本已经在各大商店上线,目前已有三个服务器。

  • 前端:cocos2d-x lua + 改引擎
  • 后端:并没有很多需要实时交互的数据,因此主要为短连接,采用nginx+php,数据库为mongoDB,后期才摸索出需要一个靠谱的架构。

参与的开发

虽然并没有契约关系,但是出于基本的职业道德,不会太详细的从代码上说做了什么。一些已经是历史版本的框架倒可以提及。

大boss一开始便选定了quick-cocos2d作为框架,lua语言。因为学过python,对于脚本语言上手起来也比较快,加之lua的语法、函数库也格外简单,所以很快过渡到后端服务器的设计当中。

当时的前辈选了云风大大的skynet,听介绍是类似一个服务器框架,但是这还是一个比较新的开源框架,并没有详细完备的文档,很多东西需要经验+硬啃代码消化了自己再开发。后来查资料时有人评价说skynet的用户人群应该是敢于尝鲜并且有c/c++和lua开发经验的人,作为菜鸟程序猿深以为然。

估计大boss也意识到了这个问题,于是和骨干们一商量,服务器拍板为nginx+php

而数据库,也从最开始的Redis+MySQL变为MongoDB,虽然之前写的代码作废了,但是对于创业公司来说也是比较稳妥的作法,一开始就想搞个大新闻还是比较有风险的……而且MongoDB在之后的开发中用起来也相当顺手,与关系型数据库开发起来各种条条框框截然不同。

之后和另一个同事负责后端业务逻辑的编写,例如战斗胜利后的数据更新、人物的装备更替等等。对于php语言,也是一边用一边学。

由于团队小、时间紧张,便没有文档,像是出现过多次的代码整合直接和同事口头知会一声即可。但其实有个简单的文档也好,因为时不时会在其它php文件中看到类似功能又实现了一遍,同时也不利于员工变动后的交接。

除了业务逻辑外,还有服务器负载、数据传输加密的问题。前者我并未直接参与测试,只是知道是看在高并发的request和数据处理下CPU和内存的使用情况,以及服务器返回数据的速度等。后者采用xxtea和另外的密钥加密,当然除此之外还有别的加密手段就不提了。

在开发过程中也不断遇到需求更改的情况,譬如加一个全局的成就更新,类似于“累积消费xx钻石”“累计获得xx件装备”,消费钻石、获得装备都好说,有公用的函数,在函数中添加新代码即可。但是有些成就的统计只能修改具体的业务逻辑代码文件,如果未来有新的成就,或者类似成就的全局变量更新,仍然要把具体的代码文件一个个修改,感觉在效率和维护方面不太合适。

如果有一个统一的返回数据处理中心,集中处理成就之类的数据统计更新,想必可以优化开发,但是在毕业离职离京时这个概念也只有个草稿,后续是由同事完成。而不久后,公司招来了经验丰富的后端开发人员,后端服务器的框架又如同壮士断腕般推翻

除了后端的开发外,由于人手紧缺,前端只有一个工程师,加上测试后端也需要前端配合,因此也或多或少写了些前端的代码。

前端复杂的核心部分由主程负责,因此对我来说是打打下手,没有太复杂的东西,主要是画面元素的布局和动画的重复性工作,UI交互逻辑和各图像元素坐标都由策划们设计好,再从美工那里要素材。

为了简化代码,大boss自己动手写了函数,整合了各种元素的设置,即使不懂代码也只要照猫画虎填上坐标参数格式等即可。在此之前,用什么函数、什么参数、图层管理、坐标参考对象等等都是琐碎又头疼的存在。

总结

参与一个初创项目,确实可以全面地了解一个商业化手游的推进过程,策划、运营、美术、开发都要有人,美术还分场景和特效,光一个主美公司就前前后后换了三四个,真是铁打的阵营流水的兵。美术需要的人比开发要多,实在来不及或者没能力的还得外包,外包的美术风格还得和自己的美术风格统一。

大Boss既要做策划,还要监督进度,有了Demo之后还要到处找投资、运营代理、渠道商。而往往策划们想出来的好玩的点子在运营代理或是渠道商那里要被砍或者改,游戏改着改着就渐渐变了味,有时候不得不学会妥协吧。

开发方面,没有经验也没有专业知识是硬伤,像是短连接长连接这类知识也是现学现用,有些东西因为不知道它的存在,于是便不知道要用在服务器里。像是架构这种东西,或是防作弊的手段等等,现在回头看当时的处理便觉得危如累卵、粗糙不堪,就比如密钥这种东西是不好明文写在代码里最好随机生成,否则代码一被逆向破解就完全被暴露了。

但即使再简陋,它最终还能完成到可以玩的地步,确实是从无到有很好地锻炼学习能力。纵使公司是996的作息(实际因为上课等原因并没有一周六天),也并不觉得辛苦,反而饶有兴趣。