遊戲開發中最複雜的模塊,沒有之一。其實我也不想寫這篇文章,怎奈框架代碼賣出去了,得給個人用戶一個交代。
網絡模塊都須要實現哪些功能呢?按我以往的開發經驗總結以下:服務器
這個看需求吧
有沒有開發過程當中將長連接改爲短連接的狀況呢?你客戶端不支持,服務器但是支持的。
若是一個團隊有不少開發人員,做爲主程的你是否要屏蔽底層邏輯,提供統一的調用接口給其餘開發人員使用呢?
若是你一我的作一款遊戲,你就隨便來吧,隨便什麼樣的方式只要你開心就好。微信
export default class LoginController extends LogicController { constructor(){ super(LoginProxy.instance()); } private static ins:LoginController; static instance():LoginController{ if(!this.ins){ this.ins = new LoginController(); } return this.ins; } //註冊協議號與回調函數 getProtoList(){ return [ [NetConfig.OPEN,this.netOpen], [LoginProtocolIDs.LOGIN,this.loginRsp], ]; } netOpen(){ cc.log(' 連接成功 ') this.pushView('Prefab/LoginView','LoginView',null,ModuleManager.getLoader(),UIIndex.STACK) } //進入模塊 先連接服務 固然也能夠先彈出界面,再推送連接結果。 intoLayer(){ ModuleManager.setModuleID(ModuleID.LOGIN) //進入此模塊,先進行連接操做,若是連接成功 會走loginRsp 函數 this.remoteProxy.connect(new ServiceInfo(NetConfig.HTTP,AddressConfig.getAdress(AddressConfig.LOGIN,0))); } // 點擊登錄按鈕發送請求。 loginReq(name:string){ cc.log(" loginReq ",name); this.sendMessage(LoginProtocolIDs.LOGIN,{name:name,channel:'crazy'}); } //登錄成功 loginRsp(msg:ReceiveMessage){ cc.log(" loginRsp msg ",msg); //因爲服務器已經關閉,因此不會被調用,正常內容返回時會走這裏。 } }
細節代碼太多了,若是都粘貼上來沒法忍受。其實網絡那些事論壇裏已經有人說的很詳細了。使用方式也不少,就好像都是用xxgl,每一個引擎實現的方式都不一樣。我只是從框架和封裝的角度整理一下具體的使用方式,其實細節的東西,你沒有遇到的時候也是沒辦法理解的,代碼裏都是經驗。有想法的同窗留言吧。網絡
歡迎掃碼關注公衆號《微笑遊戲》,瀏覽更多內容。框架