@RexGene
2016-08-23T00:06:21.000000Z
字数 1947
阅读 6896
游戏分析
由于一次偶然的机会,使我发现了一款国内目前为止我认为对Pokemon还原度较高的一款产品——《口袋妖怪复刻版》。这款游戏无论是战斗画面,画风,技能,甚至是宠物的叫声,基本跟原著一模一样,而且已经在线上各大平台推了起来。由于画风上非常接近原著,我猜想假如在没有官方的支持下,能模仿得如此的高,恐怕这项目的原画已经可以直接去画漫画了。而且最近这么火的一个IP,要是没有没有版权,估计渠道也不敢花这么多资源去推。所以综合上述的理由,我认为这款《口袋妖怪复刻版》,有很大的可能性是已经获得了授权,也因为这个原因,所以我决定要对这款游戏进行一次简单的分析。
要了解一款游戏的框架结构,从库文件入手,能更快速地看出这游戏所使用的引擎,让我们初步来了解下这款游戏链接库目录结构:
首先说libbspatch这个库,是友盟SDK所需要依赖的其中一个库,主要是做增量更新,其配套的工具还有bsdiff和bspatch,分别是负责生成差分版本和打补丁,在这里就不再细说了,有兴趣的读者可以独自去了解下。
阿里云App SDK其中一个依赖库,主要负责幽灵进程相关接口。
阿里云App SDK其中一个依赖库,主要是提供网络连接的相关接口。
银联的计费SDK所依赖的库文件
java层调用lua的库文件
提供一些最基础接口的库,其中包括以下接口:
memcpy
memset
strncmp
针对Android Froyo(Android 2.2)的StageFright硬件解码库
针对Android Honeycomb (Android 3.X)的StageFright硬件解码库
实现Adobe AIR框架基础接口的库
相信有不少熟悉游戏开发的读者看完这些库之后有跟我一样的诧异。因为作为一款手机精品游戏,它并没有使用我们的主流引擎,而是选择使用Adobe AIR。我认为这款游戏之所以选用AIR,很大可能是由于游戏的客户端主程之前是做页游出身,对AS有一定的依赖性,所以当准备手游项目的时候,就优先地选用了以AS为开发语言的AIR作为开发框架。但是,我建议如果可以选择的话,还是尽量不要选用AIR作为手机游戏开发框架,因为从性能上来看,不见得比其他手游开发引擎有优势,哪怕是做性能条件没真么高的休闲类游戏,在耗电量方面还是会有所影响。
第二个让我觉得兴奋的点是在java层调用lua这个地方。既然使用了AIR,其主要逻辑应该是使用AS,但是这里有多了一层Java调用lua的需求,所以不得不让我顿时产生了好奇心。后续我们将会开始分析应用层结构。
在应用层中,负责主要业务逻辑的分别是:
从名字上基本可以看出,Pocketmon.swf是游戏的主程序。游戏的逻辑都基本写在Pocketmon.swf(在这里我要纠正一下《口袋妖怪》的官方英文其实应该叫《Pokemon》)。那么AppLoader.swf主要是做什么的呢?在资源路径里,我们发现了一个叫做AssetsConfig.json文件,文件内容大部分都是一些资源文件,以及一些远程资源路径,其中也包括Pocketmon.swf。由此可见
AppLoader.swf的工作主要是负责把资源与应用更新独立出来,方便日后其他项目的功能重用。
再说说另一个比较重要的文件xpkg.cra。xpkg.cra是一个资源包,解包后,我们可以看到里面大部分的资源文件都是计费相关的,比如移动,电信,联通,银联,微信等图片Logo,以及一些lua的脚本文件,终于我们在这里发现了lua的踪影:
通过这文件列表,我们可以大概得知,这部分的脚本内容,主要是负责处理支付,登陆,注册等运营平台相关的业务逻辑。
通过上述的分析,我们可以大致确定《口袋妖怪复刻版》客户端的技术架构大致可分为三大层:
------资源加载层(AppLoader.swf)
| |
| ------AssetsConfig.json
|
--游戏应用层(Pocketmon.swf)
|
--平台SDK适配层
|
------xpkg.cra
到目前为止以我掌握到的信息,这游戏充分利用了AIR的特性,在模块化管理方面做得相当的不错,同时配合lua的使用,以最大限度降低平台移植的成本。虽然使用的框架并非主流框架,但总体来说,还是有不少地方值得我们参考。