由于原来公司不做3d客户端游戏引擎了,所以我在离职前夕思考了很多关于自己发展道路的问题,最后决定转战移动平台(ios)。因为今年刚刚毕业,所以转行更容易些。10年来pc端积累的人才已经很多了(虽然发现的高手并不多),作为一个新人,虽然我很自信自己的pc客户端能力(大学四年的不断磨练),但是我毅然决定往这个新兴的领域进军,想在这片领域成为元老级的人才。我相信只要认认真真干,哪里领域都有施展自己才华的天空。
回归正题,刚到现在这个公司不久(两周),通过看当前的一些项目,加上自己早先看的oc语法和以及编写了一些cocos2d-x的Tutorial,让自己对cocos2d有一些了解。但是这些零零碎碎的东西,总让我觉得不够系统,于是买了《Learning Cocos2d: a hands-on guide to building ios games with cocos2d, box2d, chipmunk》,希望从大师那里得到一些更权威地,更系统地认识,这本是还不错,能让初学cocos2d的我更全面的把握cocod2d,虽然只是停留在使用层面。正当我看完书,准备将案例从新编写之际,旁边的ios开发A(上司说他很牛)给我带来了一个极具挑战性的任务(这几天已经听到他们和策划说有很多任务没法做,很难做。估计要拉我下水了。因为我是另外一个项目的,但那个项目目前没有开始,所以我闲着)。
A:”我们这边任务很紧,有些活需要人帮忙,我这里有我们参考的Flash项目的所有场景图(.swf)文件和对应的动画资源文件。现在我需要你把每个场景图里面的所有动画写成json文件,每个json对象包括id,x,y,photoName。你可以用截图软件参考这估计出每个动画的坐标,最后用ipad项目程序微调到和Flash程序一样的位置。”
我:“截图工具?mac下的截图不好用啊,最后还要微调?”
A:“没办法,要不然你怎么知道坐标,最后要微调的,你用截图软件估计出来的坐标不一定准,一般都要重调。”
我:“有多少个场景图,一个场景图里面有多少个动画?”
A:“40来个场景图,一个场景图有4,5个动画。我已经给你做了一个场景图的json文件,并把资源拷出来重命名了,资源要按这样的命名规则。”
我:“你弄一个场景多的动画要多久?”
A: “一个大概10分钟吧。”
我沉思了会,纯手工些写json文件已经很繁琐了,还要用截图软件估计坐标,估完了之后还要拿项目程序来微调,其实最慢是微调,坐标他们都是硬编码的,为了改变一个动画坐标,需要重写坐标,就要重新编译,我擦,假如一个动画微调3次,每次编译启动程序加观察坐标是否正确如果是2分钟,那么 40个场景,每个5个动画,每个 3 * 2分钟,40 * 5 * 6 = 1200分钟,光微调就要1200分钟啊。而且最后还要保证资源不重复,需要看着这个动画以前是否存放过,而且要记住以前的名字!!!而且这个任务明显是策划做的吧!但我冥冥中觉得可以以柔克刚,编写工具来完成,这样既能完成任务,又能锻炼自己,也能让同事更清楚自己的水平,真是一箭三雕。于是。。。
我:”这样做太繁琐了吧!“
旁边的策划B开始发言。
B:“没办法,我这有个工作更变态,我为了找坐标,我要开3个程序,要先从这个程序看它是否对不对,然后~~~~~~”。
我都听不进去了,太麻烦了吧。
我:“我觉得这样的工作,需要写个工具。”
A:“工具也只能给你找出图片坐标,其他的什么资源还是要你自己弄,也省不了多少时间!”
由于当时也没想清楚工具能帮多少忙,但是作为一个热爱动手编写工具美化生活的我,是坚决不能忍受做机器的活,一项一项的都是机器做的应该,让人来做太麻烦了。
我:“能省点时间就省点时间吧”
A:“也行,反正能弄出来就行,下周五之前完成就行,别太累!对了资源要确保只有一份!你看到以前出现过,你就别拷贝了,然后json里面photoName就些以前的。”
我更感到,要保证200多个动画是否重复,记住那个唯一动画名称会让任务更复杂。这进一步激发了我做工具的欲望。冷静一想,正好看完cocos2d的书,没时间练习,正好拿这个当练习。只是我原来是个windows开发人员,windows下开发的小工具还行,mac平台的api从来就没用过啊,会不会很难搞啊。再想,也正好通过机会一起练习mac平台开发吧,每个平台的api功能应该相似,思路应该不会有太大差别,在docuement里面查查api说明应该就行了吧。
抱着这样的想法,我开始准备开发一个所见即所得的工具(像3d游戏引擎里面的UI编辑器),能将场景图加载进去,并且自动加载当前场景图的所有动画,然后我能从一些面板上选择已经存在动画,并添加到当前场景图中,摆放到和Flash项目中一样的位置,然后把当前场景的所有动画导出成json文件,并将用到的动画资源拷贝出来按照规则重命名,并确保唯一性。
以这样的大体思路,在上下班的路上不断思考整个框架,类组织结构,用户操作性(因为做mac的cocos2d开发好像只能在模拟器上开发,所以只有触屏消息,没有以前的单击,双击,左击,右击),以及可能存在的一些问题,如果动画模版太多,一个屏幕摆放不开,应该添加滚动功能,但cocos2d又没有几个UI控件,这也只能自己实现。
前后换了两三次用户操作方式,添加了工作任务保存等更任务,在此过程中,也认识到cocos2d的内存托管的规则,mac一些api的使用(原来mac的api用起来很舒服)。在这个开发中,我发现自己使用很多宏,突然能体谅以前高手为了写一些代码,宏那么多,就是为了编写方便,美观代码,又不像调用函数那样会添加一次函数跳转。
终于,完完整整耗时4天时间,工具开发到用户良好使用的的程度,并完成了A交给的任务。这可比我盯着屏幕量坐标,手写json文件,手动拷贝动画资源,重命名并保证唯一性更有意义。当A来到我身边,看我这个任务做的怎么样的时候,我正用着这个工具来完成任务,A看了良久,也帮我一起布局,最后说一句,”做的不错“。多么美妙的一句话,又鼓舞了我的不断前进的心。
做完之后,自己还有点恋恋不舍,因为又是一个自己用心开发出来的工具,这个工具把我的上下班路上想到的所有功能都集成进去了(因为以前写小工具,有时为了避免麻烦,没有把各种功能都实现,但这个工具都实现的),下班的时候心里还是美滋滋,还吃了个德克士的手枪鸡腿犒劳自己。