$30 off During Our Annual Pro Sale. View Details »

(Mobile) App and Open Source: Kamigami Client on Various Platforms

(Mobile) App and Open Source: Kamigami Client on Various Platforms

One of two keynote for me on COSCUP 2013. In this presentation, I would share my experience for the implementation of Kamigami game engine client on iOS and Android (and something more :) )

Hsiao-Ting Yu

August 03, 2013
Tweet

More Decks by Hsiao-Ting Yu

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. 不就 AVG,有很難嗎?

    View Slide

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

    View Slide

  8. 跨平台永遠是痛
    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^/

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 代價就是:

    View Slide

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

    View Slide

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

    View Slide

  15. OPEN SOURCE!
    OPEN SAVES THE DAY!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 遊戲上通常會遇到的問題
    多執⾏行序(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 的⾏行為後好好寫

    View Slide

  26. View Slide

  27. 作功課

    View Slide

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

    View Slide

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

    View Slide