剖析《口袋妖怪復刻版》技術架構
剖析《口袋妖怪復刻版》技術架構
前言
由於一次偶然的機會,使我發現了一款國內目前為止我認為對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的使用,以最大限度降低平臺移植的成本。雖然使用的框架並非主流框架,但總體來說,還是有不少地方值得我們參考。
相關文章
- WEB 架構技術Web架構
- 網站技術架構網站架構
- 大型網站技術架構(三)--架構模式網站架構模式
- 大型網站技術架構(二)--架構模式網站架構模式
- 業務架構、資訊架構、技術架構三位一體架構
- 我的“技術架構”之旅架構
- springcloud技術架構理解SpringGCCloud架構
- BOSS系統技術架構架構
- 大型網站技術架構(四)--核心架構要素網站架構
- 數商雲:「技術層面」剖析B2B供應鏈系統技術架構的部署方案架構
- 大型網站技術架構(三)--架構核心要素網站架構
- 今日頭條技術架構分析架構
- 微服務平臺技術架構微服務架構
- 微服務架構之「 容器技術 」微服務架構
- 幽默:企業技術架構 2.0架構
- docker架構和底層技術Docker架構
- oracle19C技術架構Oracle架構
- 技術架構演進的思考架構
- 美顏SDK架構技術分析架構
- Redux技術架構簡介(一)Redux架構
- 技術架構的關注點架構
- springblade技術架構Spring架構
- 剖析公司技術棧
- Javascript 技術原理剖析JavaScript
- 首個AI軟體工程師Devin完整技術報告出爐,還有人用GPT做出了「復刻版」AI軟體工程工程師devGPT
- 大型網站技術架構——2. 網站架構模式網站架構模式
- 大型網站技術架構(二)--大型網站架構演化網站架構
- 大型網站技術架構(五)--網站高可用架構網站架構
- 大型網站技術架構(一)--大型網站架構演化網站架構
- 人人都是架構師-清晰架構 | 京東物流技術團隊架構
- 「架構技術專題」9種高效能高可用高併發的技術架構(5)架構
- 【小白寫論文】技術性論文結構剖析
- EdgeBoard中CNN架構的剖析CNN架構
- React Native新架構剖析React Native架構
- 後端架構師技術圖譜後端架構
- 位元組跳動的技術架構架構
- PingCode 技術架構揭祕GC架構
- CynosDB技術詳解——架構設計架構