【簡報】《Final Fantasy Record Keeper》開發實務暨產品架構經驗分享

Photo of author

By 吹著魔笛的浮士德

2016 01 04 220720

擔任《Final Fantasy Record Keeper(FFRK)》主要研發人員的新井英資先生,於「第二屆 DeNA 遊戲開發交流會」中分享了該團隊的開發經驗。

新井先生的簡報分為三個部份,分別是《FFRK》的遊戲開發方法,遊戲的整體架構,以及各種技術性問題的解決方法。

他也大方分享了遊戲初期所發生的各種問題(效能極差,極度耗電),並說明他們是如何在一個月內徹底改造架構,優化效能的。

我本身不是程式人員,所以對於簡報內的專有名詞有如鴨子聽雷,邊讀邊撥電話請公司的研發同事告訴我哪些詞是什麼意思,最後決定全部照英文(外來語)打出來。吹著魔笛的浮士德不專業翻譯
教學以相長,歡迎各位嚴厲的指正內文,同時也讓我有學習的機會。

簡報原始檔連結:
http://www.slideshare.net/dena_study/20141111-seminar-eisuke/21

Page 1 – 《Final Fantasy Record Keeper》的開發方法

2016 01 04 220720

譯:DeNA 新井英資分享吹著

Page 2 – 自我介紹

2016 01 04 221240

◎自我介紹。新井英資,FFRK 團隊的 Lead Engineer,2011 年入社(第四年)。
◎以前在打工的時候曾開發過 iOS APP,負責 Infra 與 Middleware 及團隊對外的溝通與協調
◎化不可能為可能。


Page 3 – 今天要談的事

2016 01 04 221242

◎FFRK 的開發經驗分享
◎FFRK 的架構
◎FFRK 應用相關經驗


Page 4 – FFRK 的開發經驗分享

2016 01 04 221243

Page 5 – 關於 FFRK


2016 01 04 221245


◎ iOS/Android 版本於 2014 年 9 月 25 日推出
◎ 與 SEX 社共同開發的作品
◎ 以點陣圖的方式重現 FF 全系列作品的戰鬥
◎ 既懷舊又嶄新的 Final Fantasy
◎ 由 DeNA 負責系統開發
◎ 感謝玩家支持,反應十分的好


Page 6 – 影片展示(應該是在會場上撥放)

2016 01 04 221246

Page 7 – 開發之初的要件

2016 01 04 221247

◎ 想開發 Application(可以放豐富的動畫)
◎ 想控制內容的更新(釋出不用更新版本的事件)
◎ 想利用既有的資源如 Kickmotor(D.O.T、三國志 Royale)以及網頁遊戲的內製 Framework吹著魔笛的浮士德不專業翻譯

Page 8 – Hybrid Applicaion

2016 01 04 221249

◎ WebView Layer 與 OpenGL Layer 兩層架構(表現方面透過 OpenGL 來做)
◎ WebViewBridge(WebView 由 JS 執行 Native 的函數)吹著魔笛


的浮士德不專業翻譯

Page 9 – 這邊是 WebView

2016 01 04 221250

Page 10 – 這邊是 OpenGL吹著魔笛的
浮士德不專業翻譯
2016 01 04 221252

Page 11 – 實裝 WebView 的 JS吹著魔笛
的浮士德不專業翻譯
2016 01 04 221253

◎ 導入 MVC Framework(也將 Front 構造化實裝)
◎ Backbone.js + RequireJS(考慮到利用實績)
◎ Underscore template( 將 JST Compile 後使用)


Page 12 – 戰鬥系統實裝

2016 01 04 221255

◎ 重現 FF 的 ATB  戰鬥系統(待機、詠唱、攻擊等狀態的控制)
◎ 利用 JS 實裝 State Machine(Native 動畫描繪與戰鬥邏輯分離)
◎ 動畫部份是 Deferred Chain(Native 的描繪 Callback)
◎ 製作頭目的 State Map(控制豐富的頭目行為)

Page 13 – FFRK 做好了!準備上架了!

2016 01 04 221256

Page 14 – 上架前一個月發生了這些事

2016 01 04 221257

◎ CB 測試的結果是 Loading 太重,而且太燙了
◎ 戰鬥畫面只有 10 FPS
◎ 物品欄無法捲動
◎ 電力耗損的速度比充電還快

Page 15 – (死)

2016 01 04 221259

Page 16 – 優化祭典 WebView 篇

2016 01 04 221300

◎ 透過 Chrome Profiling(徹底清除多餘的處理並從 Layout 架構開始重作)
◎ 與 Naitve 同等 Level

Page 17 – 從這樣變成…

2016 01 04 221331

Page 18 – 變成這樣

2016 01 04 221333

Page 19 – 從這樣變成

2016 01 04 221335

Page 20 – 變這樣

2016 01 04 221336



Page 21 – 優化祭典之 Native 篇

2016 01 04 221338


◎ 檢查所有用到 OpenGL 的外部呼叫功能
◎ 減少無用的外部功能(頂點數 0 的描繪與無用的廣域描繪領域)
◎ 統整參照相同 Texture 的描繪
◎ Android 2.X 版本也能跑足 30 FPS(Draw Call 削減至 4 分之 1)

Page 22 – 如此一來從這樣…

2016 01 04 221339




Page 23 – 變成這樣吹著魔
笛的浮士德不專業翻譯
2016 01 04 221340




Page 24 – Hybrid 的優點

2016 01 04 221342


◎ 可以實現事件驅動(不會受到客戶端申請期間的影響,變更 JS 便可以做出完全不同的遊戲)
◎ 利用 Chrome 或 Safari 就可以除錯

Page 25 – 儘管如此


2016 01 04 221343

◎ 難以做出動作性高的要素
◎ WebViewBridge 的延遲
◎ HTML Template 會在讀取途中終止
◎ 悄悄地放在「重新讀取」鍵
◎ 依作業系統版本的不同而會有差異(主要是 Android)

Page 26 – FFRK 的架構

2016 01 04 221344




Page 27 – 長這樣

2016 01 04 221346


由左至右,由上至下:OpenGL / WebView / html, json / Game Server / WebView . NativeBridge / Native Cache / js, css, AnimeData / Database

Page 28 – Client 架構

2016 01 04 221347


由上而下,由左而右:Game / WebView / Native Cache / WebView . NativeBridge / Native Animation / cocos2d-x / 其他 SDK / iOS / Android吹著魔


笛的浮士德不專業翻譯
Page 29 – Native Animation

2016 01 04 221348


◎ Animation Player – 內製工具作成動畫檔後利用 Cocos2d-x 撥放
◎ 細微的動畫控制 / 資料控制 / Master 控制 / JS 控制

Page 30 – 圖解 Native Cache

2016 01 04 221350


◎只向伺服器要缺少的 Asset


Page 31 – Native Cache

2016 01 04 221351

◎ WebView & Native 的 Access(Sunny Lee & 虞敬業指正)
◎ 使用 Mongoose 建立 APP 內部 Proxy Server
◎ 沒有 Cache 的話再從 Server 撈
◎ 放進 Cache 的東西什麼都有什麼都不奇怪
◎ CSS 的處理上多了些手續(保存時將圖片的 URL 重新指向 Cache Server)

Page 32 – FFRK 的其他情報分享

2016 01 04 221353

Page 33 – 高負載的對策

2016 01 04 221354

◎ 上架後馬上投入電視廣告宣傳(用戶急速增加,當時已有 300 萬人, Web 伺服器陷入混亂)
◎ 迅速展開負載應對(Shard DB 追加 / Web 伺服器依次投入)
◎ 終於不再當機

Page 34 – Master 管理

2016 01 04 221355

◎ 透過 Google Spreadsheer 統一管理
◎ Google Apps Script(Master 值的 Mapping / 輸出 CSV)
◎ Master 生成 Flow(開發環境 Load / Master 的測試 / github:E 經由 Jenkins Pull-Request)

Page 35 – ChatOps
2016 01 04 221356

◎ IRC + Jenkins +Hubot(Jenkins 失敗時全員暴怒)
◎ Hubot 的管理(Jenkins 的 Build 狀況 / 驗證環境的狀態 / 其他多餘的功能)

Page 36 – 總結

2016 01 04 221358吹著魔笛的浮士德不專業翻譯
◎ FFRK 是 Hybrid Applicaion(WebView 與 Native 兩種 Layer 的最佳化)
◎ FFRK 的特徵結構(動畫撥放器 / Native Cache)
◎ FFRK 無止盡的改善之路(高負載對應 / Master 管理 / ChatOps)


Page 37 – 致謝語

2016 01 04 221359

吹著魔笛的浮士德不專業翻譯
◎感謝 Infra Team + Middleware Team + 優化團隊及開發團隊的所有人,謝謝。


吹著魔笛的浮士德
遊戲產業觀察評論家、9 級 Google 嚮導美食探店者、親子成長的初心者
合作信箱:gameqbfaust@gmail.com

追蹤 Instagram:https://lihi3.cc/vlzV5

↓追蹤 Facebook 專頁↓