游戏开发中最复杂的模块,没有之一。其实我也不想写这篇文章,怎奈框架代码卖出去了,得给个人用户一个交代。
网络模块都须要实现哪些功能呢?按我以往的开发经验总结以下:服务器
这个看需求吧
有没有开发过程当中将长连接改为短连接的状况呢?你客户端不支持,服务器但是支持的。
若是一个团队有不少开发人员,做为主程的你是否要屏蔽底层逻辑,提供统一的调用接口给其余开发人员使用呢?
若是你一我的作一款游戏,你就随便来吧,随便什么样的方式只要你开心就好。微信
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,每一个引擎实现的方式都不一样。我只是从框架和封装的角度整理一下具体的使用方式,其实细节的东西,你没有遇到的时候也是没办法理解的,代码里都是经验。有想法的同窗留言吧。网络
欢迎扫码关注公众号《微笑游戏》,浏览更多内容。框架