淺談棋牌游戲開發(fā)框架架構(gòu)

現(xiàn)在來和大家分享下怎么架構(gòu)和實(shí)現(xiàn)框架來滿足棋牌游戲需求的。一、原型符合棋牌項(xiàng)目框架,快速換皮,快速融合。多渠道多包體。自由拆裝。一次開發(fā)核心玩法,快速自由迭代各種市場版本。二、架構(gòu)設(shè)定解耦,復(fù)用性,拓展性多自由度、可分拆多項(xiàng)目開發(fā),符合敏捷需求品質(zhì)保證體系高效開發(fā)支撐公司大部分業(yè)務(wù)三、模塊設(shè)計(jì)概要減少客戶端對Cocos2d-x引擎的依賴程度和降低耦合度,將引擎必要的初始化、邏輯更新、渲染、資源管理等交給底層處理,是客戶端邏輯開發(fā)不需要過于依賴引擎層,同時(shí),為了避免客戶端代碼中
現(xiàn)在來和大家分享下怎么架構(gòu)和實(shí)現(xiàn)框架來滿足棋牌游戲需求的。

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

二、架構(gòu)設(shè)定解耦,復(fù)用性,拓展性多自由度、可分拆多項(xiàng)目開發(fā),符合敏捷需求 品質(zhì)保證體系高效開發(fā)支撐公司大部分業(yè)務(wù)

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

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

2、 UI系統(tǒng)(GUISystem) UI的一些基類,例如彈出框可以將如下屬性封裝成一個(gè)Dialog對象,派新類自然擁有這些屬性了??稍O(shè)置大小并且?guī)в嘘P(guān)閉按鈕的一個(gè)基本視圖,另外子類不再需要去設(shè)置dismiss了。還有類似于Toast的創(chuàng)建,以及一些基本控件完全可以架構(gòu)一個(gè)工廠對象,從而省略很多的基本控件的構(gòu)造代碼。當(dāng)然也可以在Lua中通過配置文件來配置基本UI。大雄游戲認(rèn)為,健全的紋理管理規(guī)則及清理規(guī)則,紋理緩存在場景切換后不會移除??梢钥紤]逐幀加載,將紋理分級,公共資源可以不remove,先刪除可能不再使用的幀動畫資源等。 特別設(shè)計(jì)有限狀態(tài)機(jī)管理紋理內(nèi)存,動態(tài)控制空間。以及利用狀態(tài)機(jī)的事件特性來控制動態(tài)跳轉(zhuǎn)。

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

4、數(shù)據(jù)管理模塊(DBSystem) 類似于ORM的設(shè)計(jì)架構(gòu),調(diào)用者不需要關(guān)注實(shí)現(xiàn)細(xì)節(jié),來處理一些數(shù)據(jù)、音效相關(guān),如音量關(guān)閉,音量大小等類似數(shù)據(jù)的處理 一些可以緩存在本地的數(shù)據(jù),如一些公告之類的文本信息。

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

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

模塊化更新: 大廳合集中,下載相應(yīng)的模塊,然后再點(diǎn)擊就可以玩相應(yīng)的模塊了。技術(shù)設(shè)計(jì)上,可以將資源熱更下來,即刻reset Lua的Package?;蛘邔⑾螺d的模塊添加到搜索路徑。

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

義烏市森焱網(wǎng)絡(luò)公司專注開發(fā)棋牌游戲十一年,本著顧客第一,質(zhì)量第一,售后第一的理念用心做好每一款游戲,森焱有你們才精彩?。?!