剖析《口袋妖怪復刻版》技術架構

Esmeralda72 8年前發布 | 32K 次閱讀 軟件架構 游戲開發

 

前言

由于一次偶然的機會,使我發現了一款國內目前為止我認為對Pokemon還原度較高的一款產品——《口袋妖怪復刻版》。這款游戲無論是戰斗畫面,畫風,技能,甚至是寵物的叫聲,基本跟原著一模一樣,而且已經在線上各大平臺推了起來。由于畫風上非常接近原著,我猜想假如在沒有官方的支持下,能模仿得如此的高,恐怕這項目的原畫已經可以直接去畫漫畫了。而且最近這么火的一個IP,要是沒有沒有版權,估計渠道也不敢花這么多資源去推。所以綜合上述的理由,我認為這款《口袋妖怪復刻版》,有很大的可能性是已經獲得了授權,也因為這個原因,所以我決定要對這款游戲進行一次簡單的分析。

結構分析

庫結構

要了解一款游戲的框架結構,從庫文件入手,能更快速地看出這游戲所使用的引擎,讓我們初步來了解下這款游戲鏈接庫目錄結構:

libbspatch.so

首先說libbspatch這個庫,是友盟SDK所需要依賴的其中一個庫,主要是做增量更新,其配套的工具還有bsdiff和bspatch,分別是負責生成差分版本和打補丁,在這里就不再細說了,有興趣的讀者可以獨自去了解下。

libcocklogic.so

阿里云App SDK其中一個依賴庫,主要負責幽靈進程相關接口。

libtnet-2.0.17.1-agoo.so

阿里云App SDK其中一個依賴庫,主要是提供網絡連接的相關接口。

libentryexstd.so

銀聯的計費SDK所依賴的庫文件

libluajava.so

java層調用lua的庫文件

libysshared.so

提供一些最基礎接口的庫,其中包括以下接口:

memcpy

memset

strncmp

libstagefright_froyo.so

針對Android Froyo(Android 2.2)的StageFright硬件解碼庫

libstagefright_honeycomb.so

針對Android Honeycomb (Android 3.X)的StageFright硬件解碼庫

libCore.so

實現Adobe AIR框架基礎接口的庫

分析

相信有不少熟悉游戲開發的讀者看完這些庫之后有跟我一樣的詫異。因為作為一款手機精品游戲,它并沒有使用我們的主流引擎,而是選擇使用Adobe AIR。我認為這款游戲之所以選用AIR,很大可能是由于游戲的客戶端主程之前是做頁游出身,對AS有一定的依賴性,所以當準備手游項目的時候,就優先地選用了以AS為開發語言的AIR作為開發框架。但是,我建議如果可以選擇的話,還是盡量不要選用AIR作為手機游戲開發框架,因為從性能上來看,不見得比其他手游開發引擎有優勢,哪怕是做性能條件沒真么高的休閑類游戲,在耗電量方面還是會有所影響。

第二個讓我覺得興奮的點是在java層調用lua這個地方。既然使用了AIR,其主要邏輯應該是使用AS,但是這里有多了一層Java調用lua的需求,所以不得不讓我頓時產生了好奇心。后續我們將會開始分析應用層結構。

應用層結構

在應用層中,負責主要業務邏輯的分別是:

  • AppLoader.swf
  • Pocketmon.swf

從名字上基本可以看出,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的使用,以最大限度降低平臺移植的成本。雖然使用的框架并非主流框架,但總體來說,還是有不少地方值得我們參考。

 

來自:https://www.zybuluo.com/RexGene/note/474952

 

 本文由用戶 Esmeralda72 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!