项目6 实现业务逻辑模块ppt课件_第1页
项目6 实现业务逻辑模块ppt课件_第2页
项目6 实现业务逻辑模块ppt课件_第3页
项目6 实现业务逻辑模块ppt课件_第4页
项目6 实现业务逻辑模块ppt课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,腾讯云游戏应用开发,.,实现业务逻辑模块,项目6,.,学习目标,实现游戏的几个重要业务逻辑掌握CS模式下协议的使用掌握登录注册功能的基本实现方法,.,1,实现登录功能,1.实现客户端请求登录方法,当用户在登录界面中单击“登录”按钮后,后台尝试与服务器建立连接,连接成功后发送登录协议,协议格式为login;id;password;。修改LoginPanel.cs脚本中的OnLoginClick方法,代码如下。,/*登录按钮事件*/publicvoidOnLoginClick()if(idInput.text=|pwInput.text=)/*打开提示框*/PanelMgr.instance.OpenPanel(用户名密码不能为空!);return;/如果服务器没有连接,连接服务器if(NetMgr.instance.status!=NetMgr.Status.Connected)NetMto=newProtocolStr();/*连接*/if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(连接服务器失败!);,.,1,实现登录功能,1.实现客户端请求登录方法,/发送登录协议ProtocolStrprotocol=newProtocolStr();protocol.AddString(login);protocol.AddString(idInput.text);protocol.AddString(pwInput.text);/*一次性监听*/NetMgr.instance.Send(protocol,OnLoginBack);,.,1,实现登录功能,2.实现服务端登录协议处理方法,在HandleConnMsg类中添加Msglogin方法,当服务端收到login协议时,分发给Mgslogin方法处理,publicvoidMsglogin(Connconn,ProtocolBaseprotoBase)stringid,pw;ProtocolStrprotocol=(ProtocolStr)protoBase;id=protocol.GetString(1);pw=protocol.GetString(2);/*构建返回协议*/ProtocolStrprotocolRet=newProtocolStr();protocolRet.AddString(login);/*数据库校验*/如果用户名密码校验失败if(!DataMgr.instance.CheckPassWord(id,pw)Console.WriteLine(Msglogin登录失败:用户名和密码错误+conn.GetAddress();protocolRet.AddInt(-1);/返回失败结果conn.Send(protocolRet);return;,.,1,实现登录功能,2.实现服务端登录协议处理方法,if(!ServNet.instance.KickOff(id)/如果踢下线失败Console.WriteLine(Msglogin登录失败:挤下线失败+conn.player.id);/返回失败结果protocolRet.AddInt(-1);conn.Send(protocolRet);return;PlayerDataplayerData=DataMgr.instance.GetPlayerData(id);/获取玩家数据if(playerData=null)Console.WriteLine(Msglogin登录失败:获取账户信息失败+conn.player.id);protocolRet.AddInt(-1);/返回失败结果conn.Send(protocolRet);return;conn.player=newPlayer(id,conn,playerData);/登入账户,加载数据protocolRet.AddInt(0);/返回成功结果conn.Send(protocolRet);,.,1,实现登录功能,3.实现客户端处理回发结果方法,添加OnLoginBack方法,/*登录协议回执*/publicvoidOnLoginBack(ProtocolBaseprotocol)/*构建协议*/ProtocolStrproto=(ProtocolStr)protocol;/*校验登录结果*/intresult=proto.GetInt(1);if(result=0)GameMgr.instance.id=idInput.text;/保存账号IDPanelMgr.instance.OpenPanel(登录成功!);PanelMgr.instance.OpenPanel();/*进入游戏大厅*/PanelMgr.instance.ClosePanel(this);elseNetMgr.instance.Close();/断开连接PanelMgr.instance.OpenPanel(登录失败,请检查用户名密码!);,.,1,实现登录功能,4.实现踢下线模块,如果该角色在游戏中,则把它踢下线。并且发送Logout协议,向被踢下线的客户端发送通知。在ServNet中添加KickOff方法,代码如下。,/*如果某id已经在线就踢下线*/publicboolKickOff(stringid)for(inti=0;i=beginNum)Console.WriteLine(匹配成功,创建房间);Roomroom=newRoom();for(inti=0;i=maxPlayers)returnfalse;/*修改玩家临时数据*/player.tempData.room=this;player.tempData.team=SwitchTeam();player.tempData.status=PlayerTempData.Status.Room;/*写入*/playerlist.Add(player.id,player);returntrue;,.,4,实现匹配功能,3.创建服务端房间类Room,/*分配队伍*/*返回一个队伍的ID*/publicintSwitchTeam()intcount1=0;intcount2=0;foreach(Playerplayerinplayerlist.Values)if(player.tempData.team=1)count1+;if(player.tempData.team=2)count2+;if(count1=所有玩家,则可以开始if(readyNum=beginNum)Console.WriteLine(所有玩家选择完毕,开始战斗!);StartFight();,.,5,实现准备功能,2.服务端处理准备结果,当所有玩家都准备完毕时,向所有玩家发送游戏开始协议.在Room类中添加方法,代码如下。,/*开始游戏*/publicvoidStartFight()/*构建fight协议*/ProtocolStrprotocol=newProtocolStr();protocol.AddString(fight);status=Status.Fight;intteamPos1=1;intteamPos2=1;lock(playerlist)protocol.AddInt(playerlist.Count);/*将每一个玩家的信息逐一添加到协议中*/foreach(Playerpinplayerlist.Values)/*玩家ID*/protocol.AddString(p.id);,.,5,实现准备功能,2.服务端处理准备结果,/*选择的英雄*/protocol.AddString(p.tempData.heroName);/*所在队伍*/protocol.AddInt(p.tempData.team);/*队伍位置*/if(p.tempData.team=1)protocol.AddInt(teamPos1+);elseprotocol.AddInt(teamPos2+);/*修改所有玩家的临时数据*/p.tempData.status=PlayerTempData.Status.Fight;p.tempData.isAlive=true;/*广播*/Broadcast(protocol);,.,5,实现准备功能,3.客户端处理回发协议,当服务端确定可以开始游戏时,会向房间中每一个玩家发送一个fight协议,客户端接收fight协议,开始处理战场。添加协议监听并在关闭面板时注销,代码如下。,/*添加监听*/NetMgr.instance.msgDist.AddListener(fight,RecvFight);,在OnClosing方法中删除监听,代码如下。,publicoverridevoidOnClosing()NetMgr.instance.msgDist.DelListener(fight,RecvFight);,.,5,实现准备功能,3.客户端处理回发协议,实现RecvFight方法,代码如下。,/*处理fight协议*/publicvoidRecvFight(ProtocolBaseprotocol)ProtocolStrproto=(ProtocolStr)protocol;/*开始战斗*/PanelMgr.instance.OpenPanel();PanelMgr.instance.ClosePanel(this);/初始化战场,稍后实现/BattleManager.instance.StartBattle(proto);,.,6,实现战场管理功能,1.创建BattleManager战场管理类,添加BattleManager.cs脚本用来处理战场布置,代码如下。,usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassBattleManager:MonoBehaviour/*角色的预制体*/publicGameObjectarcherPre;/*战场中的所有玩家*/publicDictionarylist=newDictionary();/*单例*/publicstaticBattleManagerinstance;/*皮肤*/publicMaterialmat1,mat2;voidAwake()instance=this;,.,6,实现战场管理功能,2.添加初始化战场的方法,用StartBattle方法解析fight协议,实例化协议中的每个玩家,代码如下。,/*开始战斗*/*处理一切战斗准备和预设*/publicvoidStartBattle(ProtocolStrproto)/*解析协议*/stringprotoName=proto.GetString(0);intcount=proto.GetInt(1);/玩家总数/清理场景ClearBattle();/实例化每一个玩家for(inti=0;icount;i+)stringid=proto.GetString(4*i+2);stringheroName=proto.GetString(4*i+3);intteam=proto.GetInt(4*i+4);/*出生点ID*/intswopID=proto.GetInt(4*i+5);/实例化角色GenerateBattleHero(id,heroName,team,swopID);,.,6,实现战场管理功能,3.添加清理战场方法,每次开启新战斗之前需要清理战场,包括清空玩家列表,恢复主摄像机的跟随状态,销毁所有角色和辅助物体(如准心)。添加ClearBattle方法,代码如下。,publicvoidClearBattle()/清除玩

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论