- Published on
开发一款游戏
- Authors
- Name
- 祝你好运
为什么要做
灵感来源就是对Elona游戏的喜爱。但是我上了班之后,尤其是有了小孩之后,就很少有机会能够在电脑上玩游戏了,而Elona目前也只能在电脑上面玩,这真的很遗憾,不是吗?为什么不动手做一个手游在手机上面玩呢?
怎么做(之前)
然后我就尝试了联系Elona的作者Noa,很可惜邮件没有收到回复。然后呢?事情总要继续做下去,要不然就完不成了不是吗?(这句话是我后面遇到很多问题的时候的万能药)。嗯,然后我不知道怎么回事,接触到了逆向,嗯,是的,Elona是用HSP写的,然后这个游戏可以逆向到HSP代码,当然是去除了变量名的版本。那还是在14年15年的时候,我就想着,与其自己去搞各种数据,各种从头再来,我还是很想参考下Elona的。然后我就开始读逆向出来的代码,然后来猜测各个变量名代表什么意思。还自学了一些HSP。但是这种效果并不好,因为逆向来的东西,如果没有参考资料,读起来还是太费劲了,我是指太费时间了。我当时确实是找到了一个逆向之后的变量名对照表,但仍然不够。后来在15年初由于我准备换工作(不详细展开了,我的意思是想说当时的时间都用来准备面试了,毕竟养家糊口是第一重要的事情),这个游戏开发的事情就暂停了。
然后从那时候起一直到现在,我都会时不时的想起这件事情,但是都没有付诸行动。兴趣点转移了,比如我尝试过用React Native开发过一个小app,感觉React Native还是很好用的(这也给了我一个启示:多去尝试一些新东西,说不定什么时候就会用到)。16年过年前也完了一段时间的怪物猎人4G,砍怪真是爽。然后在17年年底的时候,我又重拾这个项目的开发。
我就继续用Cocos2d-X来开发,当时的计划是分两条主线,一个是界面的开发,一个是游戏逻辑的开发,因为我是想把界面与游戏逻辑尽量才分开的。界面开发到能够创建和读取游戏,进到了韦尔尼斯的主城。然后一个重大突破就是我找到了一些重要的逆向相关的参考资料,比如cdata这种超级大数组中每一个变量对应什么意思。虽然不全,但是已经相当有帮助了。这个时候我就开始了游戏逻辑开发的主线推进。
比如新NPC的生成,buff,吃喝读书等等行为。等到我厌倦了这条主线的时候,就准备推进另一条主线,推进游戏界面,这样就可以边开发边测试。我还是想尽快推进游戏的开发进度,至于用单元测试来保证质量,我还是想再等等吧。
这个时候我发现一个我之前就遇到的问题实在是很烦:数据的存储于读取。因为没有合适的从C++对象到JSON(也可以是直接到数据库)的库可以用(我研究过ODB的ORM,不合适)。按照14年的设计,我是准备用SQLite的。但是由于一些model有非常多的属性(role里面有将近100个),我需要写建表SQL,更新数据SQL,插入数据SQL,这他娘的真的要写死人的。但是C++又真的没有这样的可以在运行时获取对象属性的机制,那除了C++还有没有好用的跨平台的游戏开发框架吗?研究了半天,觉得用JS还是蛮合适的。
一提起JS来开发跨平台的游戏,很多人估计和我一样会担心性能的问题,但是Elona对性能的要求并不高,而我,也是想快速开发出来,因为我能拿出来开发游戏的时间,实在是太宝贵了,毕竟上班要工作,下班还要带娃。
怎么做(现在)
然后我一狠心,就把之前写的Cocos2d-X的代码丢弃了,转战JS。然后就开始调研都有什么开发引擎可以用,最终发现有Cocos2d-JS,Egret和LayaBox。我试了下Egret,很不习惯,也试了下LayaBox,最终我选择了LayaBox,这里面的所见即所得的设计,能极大的提升开发效率。
这里说一些吐槽的地方:Egret的论坛注册需要审核,关键是没人来及时的审核,我找了好久都没办法找到人审核,最终是打他们公司的电话,他们给了我一个开发人员的微信,加他微信,然后审核了。这操作怎么样?Egret里面的TypeScript文件都应该放到哪个src文件夹下面,不然就会报文件找不到的错。LayaBox的index.html是只放到bin下面的,按照我的想法,bin下面的文件不应该只是编辑出来的结果吗?这个不应该check in到仓库吧?结果就是,我想错了,有些东西虽然放到了bin下面,但是是应该放到仓库里面的。吐槽归吐槽,该用还是要用的。
然后之前提出的那个数据存储和读取的问题怎么搞呢?我目前想到的办法就是直接把整个对象保存下来,之前也考虑过用Realm,后来发现不合适,人家是面向React Native和Node的。我目前想到的2个方法就是:1. 存到LocalStorage;2. 自己开发服务器,数据库我都选好了MangoDB。
说实话LayaBox目前也正在高速发展中,有些边边角角的问题,百度找不到答案,需要自己下一些功夫来研究和解决。
最后,还是那句俗话:不怕慢,就怕站。也就先怼起来再说,光说不练永远也搞不懂学不会。