1. 程式人生 > >最新h5牛牛平臺遊戲開發框架之架構

最新h5牛牛平臺遊戲開發框架之架構

內存 cal 引用 構造 autot auto 新的 clas 線程同步

Q1446595067官網:h5.haozibbs.com或http:\\www.aqbaa.cn

現在來和大家分享下怎麽架構和實現框架來滿足棋牌遊戲需求的。

一、原型 符合棋牌項目框架,快速換皮,快速融合。多渠道多包體。自由拆裝。 一次開發核心玩法,快速自由叠代各種市場版本。

二、架構設定解耦,復用性,拓展性多自由度、可分拆多項目開發,符合敏捷需求 品質保證體系高效開發支撐公司大部分業務

三、模塊設計概要 減少客戶端對Cocos2d-x引擎的依賴程度和降低耦合度,將引擎必要的初始化、邏輯更新、渲染、資源管理等交給底層處理,是客戶端邏輯開發不需要過於依賴引擎層,同時,為了避免客戶端代碼中頻繁、直接的調用平臺相關諸多功能,將平臺相關的功能封裝在引擎封裝模塊內。這部分我們可以叫做BaseCore部分。

1、引擎封裝模塊 (EngineSystemCocos2d-xAPI的封裝整合,綁定到Lua。關掉3D模塊,另外不再使用擴展庫。 達到可以隨意切換Cocos版本,現階段選擇比較穩定的版本 自定義控件等綁定到Lua,跨平臺特性處理、支付相關模塊特殊處理、腳本加密解密處理, 必要的時候,可以將腳本層換成js綁定,然後將邏輯代碼修改成Lua的,就可以支持H5了。

2UI系統(GUISystemUI的一些基類,例如彈出框可以將如下屬性封裝成一個Dialog對象,派新類自然擁有這些屬性了。可設置大小並且帶有關閉按鈕的一個基本視圖,另外子類不再需要去設置dismiss了。還有類似於Toast的創建,以及一些基本控件完全可以架構一個工廠對象,從而省略很多的基本控件的構造代碼。當然也可以在Lua中通過配置文件來配置基本UI。健全的紋理管理規則及清理規則,紋理緩存在場景切換後不會移除。可以考慮逐幀加載,將紋理分級,公共資源可以不remove,先刪除可能不再使用的幀動畫資源等。 特別設計有限狀態機管理紋理內存,動態控制空間。以及利用狀態機的事件特性來控制動態跳轉。

3、 網絡模塊(NetSystemSocket采用TCP/ip協議,封裝伯克利套接字接口,設計接受和發送隊列,通過互斥信號鎖來處理隊列共享問題。因為join函數調用的地方會阻塞主線程,我們可以考慮用detach方式,完全是交給系統處理,另外可以考慮第三個線程來開辟世界聊天或活動的這種比較頻繁的協議(視情況),並且將協議解析及Luatable序列化放在C++層。暴露基本接口給Lua腳本層,在腳本層處理網絡心跳、斷網重連相關的邏輯。順便我們要支持IPv6的處理,這裏只需要將地址解析、Socket初始化函數做兼容。接受子線程跟UI線程同步使用Cocos2d-x提供的事件來處理,然後C++將這個數據POPLua層,Lua這邊根據協議頭回調函數,或者是通過事件的方式派發到具體的業務。對於一些通用的協議,Lua層設計成搶占方式,或者是添加一個tag來標記目前這條協議是處於模塊。設計模式上考慮使用生產-消費模式,盡量讓協議的讀寫跟業務內容解耦。協議層的封拆包全部用python腳本生成的lua文件自動化處理,發送跟接受都是接受一個table,省去客戶端的部分工作。Http,我們可以封裝,上傳下載,以及我們日誌上傳相關的模塊等。如果使用3.11以下版本,需要替換libcurl,針對蘋果IPv6問題。結合日誌模塊,將協議交互寫在一個文件方便查看 架構圖如下:

4、數據管理模塊(DBSystem) 類似於ORM的設計架構,調用者不需要關註實現細節,來處理一些數據、音效相關,如音量關閉,音量大小等類似數據的處理 一些可以緩存在本地的數據,如一些公告之類的文本信息。

5、更新模塊(UpdateSystem) 資源熱更新,用於部分Bug修改等。模塊下載,大廳可以選擇部分模塊進行熱更,下載完後,即可重新啟動虛擬機,或reset Package。達到真正熱更意義。

資源熱更新: 通常我們會在遊戲中會出現一些小Bug或者需要更換部分圖片素材,或者部分配置文件。來適應運營策略的部分小版本更新。

模塊化更新: 大廳合集中,下載相應的模塊,然後再點擊就可以玩相應的模塊了。技術設計上,可以將資源熱更下來,即刻reset LuaPackage。或者將下載的模塊添加到搜索路徑。

版本管理: 1trunk維護一個BaseCore版本,有改動,其它所有包體都要考慮更新版本。作為一個大版本處理。後期項目多了,有改動可必須拉分支進行修改,然後同步到trunk2、業務模塊在BaseCore沒有改動的情況下,完全可以不用更新程序包,直接熱更新即可。作為一個小版本。小版本可以在一個新叠代後拉一個腳本Tag版本。 3SVN管理。需要嚴格控制版本的關系。並且做好記錄。6、音頻模塊(SoundSystem) 統一音頻解決方案,整個遊戲中只有一套API 可以區分平臺自動匹配資源名稱,如android自動將後綴改成.oggiOS改成mp3等提供音頻文件預加載

架構圖:

7、日誌系統( LoggerSystem) 分級別的日誌處理,類似log4jTag處理,更好的區分日誌文件。分文件處理,如果網絡協議日誌,行為日誌等。配合自動化測試,添加相應的行為日誌為Bug修改提供幫助。 客戶端可以設計將日誌文件上傳到日誌後臺。根據用戶ID命名。 架構圖:

8、事件系統( EventSystem) 考慮到框架總體的拓展性,我們完全使用事件驅動模型(Event-driven)來設計和開發,將客戶端中事件的觸發時機和具體處理邏輯徹底分隔開。遊戲的各個模塊,僅需要註冊、監聽和實現其關心的消息事件,而無須關心事件何時被觸發,降低了總體耦合度。遊戲中所有UI面板的隱藏/顯示、事件響應、音效的播放/停止、遊戲流程的切換、遊戲角色狀態遷移等,完全通過事件驅動方式開發;同時這種基於事件的處理方式,為項目使用動態腳本拓展提供了支持:腳本層省去對邏輯代碼的大量直接調用,通過消息事件完成腳本層和邏輯層的交互調度,大大簡化了開發的復雜度。解決多線程消息通知,類似於notification方式。處理模塊間耦合,配合狀態機,來處理UI或者說是模塊的行為。 處理全局系統數據等。如玩家數據。

9、配置系統( VariableSystem) 開發及運營包體配置,遊戲中一些配置,支持差異化包設置,這些配置包括部分的動態配置,如大廳的布局位置等

10、自動化測試系統( AutoTesterSystem) 提供簡單的測試腳本支持。如重復進行某一個操作,所以每一個核心業務都需要預留測試接口,然後結合我們的行為日誌,充分利用休息的時間,讓其自動測試。Oriented日誌。主要用來追蹤用戶操作行為,方便測試路徑重現,只用在測試階段。腳本Crash後臺,腳本測試比較難以Debug,將xpcall捕捉到的日誌提交後臺,目前情況是有一個簡單的javaWeb日誌追蹤頁面。所以只是作為內測用。自動化測試的時候,可以借助xcode等工具來查看內存情況。

四、性能優化 1、紋理資源的優化、場景資源的優化開發過程中,從嚴控制紋理,按照相應的Block合並大圖,適當情況下,可以降低清晰度。另外場景管理包含資源的管理,例如某個動畫在特定的場景中出現,我們可以直接將著部分資源在緩存中移除。公共資源可以常駐在緩存中 如果對包體要求更嚴格,可以適當考慮將圖片壓縮成pvr格式(一種顯卡可以直接識別的格式),但是這種情況是沒有alpha通道的,也就是說透明度設置有問題,只能是作為一種備用方案。 2、將一些耗時的操作放在C++層,如讀取配置文件,異步加載音頻文件等等。 3、網絡層采用多線程方式,以降低對主線程的影響。

五、質量及規格標準化 1、客戶端架構標準 方案切實可行,並且性能是第一位的,或者說是開發效率上一個臺階。 2、代碼開發標準 分兩部分,第一部分是底層代碼,健壯、高效,並且是討論過、並切實可行。第二部分腳本代碼需要從代碼風格上進行管理上的強制要求。 3、代碼Review標準 按照約定好的代碼開發標準,切實實行,原則上實行捉對協作開發。

六、課題方案管理 適用範圍: 1、架構及性能上的優化。 2、偏平臺化的技術研究。 3、對性能提高、開發效率提高有明顯幫助的技術點。 4、可開發工具及流程控制,甚至重構達到效率提升的。

七、安全相關 1、代碼安全 客戶端代碼除了底層代碼用C++以外,其它基本使用Lua腳本來開,所以腳本需要加密。以防止二次打包及非法行為。目前可以使用Cocos2d-x提供的xxtea加密策略。 2、支付安全 支付基本的參數不可暴露。

八、大廳架構 是一個最小資源包,只有一個登錄到大廳的UI展示。可以不包括邏輯業務部分,然後再去熱更新部想要玩的部分,一些公用部分完全可以設計放在這個版本內部。大體包括如下內容: 1BaseCore部分 2、賬號體系 3、熱更功能 4、大廳UI 5、可以自由配置相關的模塊來達到想要的包體 6、支付模塊的基礎部分

最理想化是可以如下操作,出某版本,後期想給這個版本加某個遊戲,可以通過熱更新的方式去更新。

模塊化遊戲大廳方案: 通過事件方式來註冊遊戲,通過配置來定好遊戲中包含哪些模塊,進行事件註冊,然後再大廳打開模塊後發送相應的事件去打開模塊。

大雄遊戲API接口合作流程,確保每一步都有客戶的參與,使大雄遊戲在每一個案例中加深對顧客需求的了解,制定出更符合客戶要求解決方案,更符合市場需求的產品。大雄遊戲售後提供終身遊戲維護升級,7X24小時技術維護支持,讓合作夥伴更省心、更放心。

九、技術實現

1技術選型及工程結構 綜合選擇Cocos2d-x3.11.1版本,更新了ipv6openssl等相關內容。BaseCore版本我們用C++完成基本功能(暫時命名為theway),然後具體業務項目將theway引用作為依賴,並且業務開發使用Lua腳本開發。這樣將底層跟業務解耦。另外為整合多個遊戲帶來最基本的技術上的支持。

2自研引擎可行性 可以做成依賴項目,作為其他項目的底層,隨著項目不斷優化和集成可以衍生成一個擁有我們自己知識產權的引擎項目。這樣底層修改或升級,只需要做兼容即可,大不必讓業務開發受限。同時可以整合各項目的開發資源,提高開發效率,產品質量。

3工具鏈開發 作為商業開發,開發工具的完善也是一項必不可少的環節,目的是為了提高產品開發的效率。例如我們利用工具提高開發效率的一個實際例子。用Python生成協議Bean來直接序列化消息內容,通過委托模式,業務模塊只需要關註發送,返回協議回調函數收到一個Table,十分的方便好用。後面可以將一些重復工作用工具去做。


最新h5牛牛平臺遊戲開發框架之架構