Slide 1

Slide 1 text

⾏行動遊戲 App 開發與 Open Source: Kamigami 的雙平台經驗 笨笨的⼩小B (littlebtc) (C) 2013 Briareus Network Technology. All Rights Reserved.

Slide 2

Slide 2 text

⾏行動遊戲 App 開發與 Open Source: Kamigami 的雙平台經驗 笨笨的⼩小B (littlebtc) +1 (C) 2013 Briareus Network Technology. All Rights Reserved.

Slide 3

Slide 3 text

退伍 → 跟 QB 簽約 → 開始投⾝身 Startup 當⼯工程師 既是為了理想(好玩的 Project) 也是為了現實(⼯工作) ⼩小B @ Briarues

Slide 4

Slide 4 text

有關我們 百臂網路科技(Briareus) 熱⾎血創業中! 努⼒力在錢燒完前⽣生出東⻄西 Kamigami 遊戲引擎是⺫⽬目前我們的主⼒力

Slide 5

Slide 5 text

跨平台遊戲⽅方案 初步以 AVG 為⺫⽬目標 ⼀一份腳本, 全平台通吃

Slide 6

Slide 6 text

不就 AVG,有很難嗎?

Slide 7

Slide 7 text

為了跨機種遊玩的複雜架構 Game Server: Store / Script / Data 機密 Kamigami App Protocol HTML5 Browser iOS Android Windows .NET

Slide 8

Slide 8 text

跨平台永遠是痛 iOS Android Windows with .NET 語⾔言 繪製 裝置 開發⼯工具 上架 Objective-C Java C# UIKit / OpenGL ES Android View / OpenGL ES Windows Forms / WPF / DirectX iPhone ~ iPad 3吋~10吋通通有 PC 滿天飛 Xcode + 保護費 Android SDK Visual Studio ($) 囧 ^o^/ ^o^/

Slide 9

Slide 9 text

為什麼不⽤用已有⽅方案? Unity(跨平台 3D 遊戲引擎)? Titanium(跨平台 App 開發⽅方案 with JS)? PhoneGap(跨平台 App 開發⽅方案 with Web)?

Slide 10

Slide 10 text

理由很多... 本⾝身已經是⼀一個跨平台服務 若再加上其他跨平台框架會增加複雜度 使⽤用 Titanium 之類的技術很難作複雜的訊息處理 或透過平⾏行 Thread 的最佳化

Slide 11

Slide 11 text

理由很多... 本⾝身已經是⼀一個跨平台服務 若再加上其他跨平台框架會增加複雜度 使⽤用 Titanium 之類的技術很難作複雜的訊息處理 或透過平⾏行 Thread 的最佳化 ⾃自⼰己寫⽐比較有成就感

Slide 12

Slide 12 text

代價就是:

Slide 13

Slide 13 text

代價就是: Kamigami ⽤用⼾戶端救⽕火⼤大隊

Slide 14

Slide 14 text

代價就是: Kamigami ⽤用⼾戶端救⽕火⼤大隊 業務: 功能實作和協定修正 閃退、當掉、低效能急救 ⽼老闆 Demo 爛掉緊急處置

Slide 15

Slide 15 text

OPEN SOURCE! OPEN SAVES THE DAY!

Slide 16

Slide 16 text

⽤用⼾戶端架構 WebSocket MsgPack UI 元件控制 外觀 / 動畫 / 事件... Audio / Video Player 訊息解析 資源下載與管理 Timer

Slide 17

Slide 17 text

⽤用⼾戶端架構 WebSocket MsgPack UI 元件控制 外觀 / 動畫 / 事件... Audio / Video Player 訊息解析 資源下載與管理 Timer

Slide 18

Slide 18 text

最困難的是繪製 iOS:內建 UI 元素(UIKit)外 追加 GPUImage 處理需要 OpenGL Shader 運算的部份 Android:LibGDX,第三⽅方 OpenGL ES 遊戲引擎 ⽂文件妥善,開發者有熱誠 .NET:SharpDX with Direct3D 9 為了 XP ⽀支援放棄 D3D11 可⽤用的資源 :(

Slide 19

Slide 19 text

使⽤用開源套件的問題 授權要對!!!(⾮非常重要) 參考⽩白名單:BSD / MIT / Apache2 / MS-PL 專案要對!!!(更加重要) ⽂文件很⿃鳥、程式碼很⿃鳥 Bug 解決狀況很⿃鳥、或跑起來很⿃鳥的情況下 要儘快 OUT 換另外⼀一個專案試試看

Slide 20

Slide 20 text

使⽤用開源套件的問題 2 ⼯工具有了,不知道怎麼寫 → 有的時候除了看⽂文件,也要下去看程式碼 任何專案都會有⾃自⼰己的 Bug → 丟去 StackOverflow 問,或著⾃自⼒力救濟 翻閱引⽤用專案的原始碼經常可以解決問題

Slide 21

Slide 21 text

開源套件的管理 有很多⼈人實作了套件管理機制,避免升級套件要 更換原始碼的⿇麻煩 iOS:CocoaPods(需要 Ruby) Android:Maven .NET:NuGet(VS2012 附贈) 修改過專案的原始碼或專案沒上管理庫是主因

Slide 22

Slide 22 text

開源套件的管理 有很多⼈人實作了套件管理機制,避免升級套件要 更換原始碼的⿇麻煩 iOS:CocoaPods(需要 Ruby) Android:Maven .NET:NuGet(VS2012 附贈) 修改過專案的原始碼或專案沒上管理庫是主因 可是我們沒⽤用

Slide 23

Slide 23 text

開源套件的管理 有很多⼈人實作了套件管理機制,避免升級套件要 更換原始碼的⿇麻煩 iOS:CocoaPods(需要 Ruby) Android:Maven .NET:NuGet(VS2012 附贈) 修改過專案的原始碼或專案沒上管理庫是主因 可是我們沒⽤用 我們還是沒⽤用

Slide 24

Slide 24 text

開源套件的管理 有很多⼈人實作了套件管理機制,避免升級套件要 更換原始碼的⿇麻煩 iOS:CocoaPods(需要 Ruby) Android:Maven .NET:NuGet(VS2012 附贈) 修改過專案的原始碼或專案沒上管理庫是主因 可是我們沒⽤用 我們還是沒⽤用 這個有⽤用⼀一點

Slide 25

Slide 25 text

遊戲上通常會遇到的問題 多執⾏行序(a.k.a. 程式當掉 or 亂加 Lock 到死) e.x. Direct3D 9 的 Device 預設為⾮非 Thread-Safe Deadlock 在某些平台⼜又很難 Debug → 請在腦袋清醒下做好同步處理機制 資源管理 Android App 退出 / 切換 / 鎖定螢幕後回來?(必要狀況下重建,LibGDX 會處理其中很多細節) Windows 視窗縮放怎麼辦?(GetDeviceStatus -> Effect.onLostDevice -> Device.Reset -> Effect.onResetDevice) Texture / ⽂文字繪製 / 記憶體管理 → 清楚了解 Framework 的⾏行為後好好寫

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

作功課

Slide 28

Slide 28 text

FEEDBACK? 對 LibGDX 以 Freetype 作⽂文字繪製的 Patch https://github.com/libgdx/libgdx/pull/263 但是我們太忙,所以沒有善終...... Still, We ὑ Open!

Slide 29

Slide 29 text

感謝清單 iOS Android .NET AFNetworking SocketRocket GPUImage LibGDX AutobahnAndroid Titanium / V8(未實⽤用) ActionBarSherlock SharpDX Websocket-sharp NAudio ClearScript / V8 Thanks for listening!!