收藏 分销(赏)

实现业务逻辑模块(课堂PPT).ppt

上传人:a199****6536 文档编号:9476468 上传时间:2025-03-27 格式:PPT 页数:50 大小:283.50KB 下载积分:14 金币
下载 相关 举报
实现业务逻辑模块(课堂PPT).ppt_第1页
第1页 / 共50页
实现业务逻辑模块(课堂PPT).ppt_第2页
第2页 / 共50页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,腾讯云游戏应用开发,1,.,实现登录功能,01,任务,实现获取自身数据功能,02,任务,实现注册功能,03,任务,实现业务逻辑模块,项目,6,实现匹配功能,04,任务,实现准备功能,05,任务,实现战场管理功能,06,任务,2,.,学习目标,实现游戏的几个重要业务逻辑,掌握,CS,模式下协议的使用,掌握登录注册功能的基本实现方法,3,.,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)NetMgr.instance.proto=newProtocolStr();/*,连接,*/if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(,连接服务器失败,!);,4,.,1,实现登录功能,1.,实现客户端请求登录方法,/,发送登录协议,ProtocolStrprotocol=newProtocolStr();protocol.AddString(login);protocol.AddString(idInput.text);protocol.AddString(pwInput.text);/*,一次性监听,*/NetMgr.instance.Send(protocol,OnLoginBack);,5,.,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;,6,.,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);,7,.,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(,登录失败,请检查用户名密码,!);,8,.,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;,24,.,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();,31,.,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);,32,.,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);,33,.,5,实现准备功能,3.,客户端处理回发协议,当服务端确定可以开始游戏时,会向房间中每一个玩家发送一个,fight,协议,客户端接收,fight,协议,开始处理战场。,添加协议监听并在关闭面板时注销,代码如下。,/*,添加监听,*/NetMgr.instance.msgDist.AddListener(fight,RecvFight);,在,OnClosing,方法中删除监听,代码如下。,publicoverridevoidOnClosing()NetMgr.instance.msgDist.DelListener(fight,RecvFight);,34,.,5,实现准备功能,3.,客户端处理回发协议,实现,RecvFight,方法,代码如下。,/*,处理,fight,协议,*/publicvoidRecvFight(ProtocolBaseprotocol)ProtocolStrproto=(ProtocolStr)protocol;/*,开始战斗,*/PanelMgr.instance.OpenPanel();PanelMgr.instance.ClosePanel(this);/,初始化战场,稍后实现,/BattleManager.instance.StartBattle(proto);,35,.,6,实现战场管理功能,1.,创建,BattleManager,战场管理类,添加,BattleManager.cs,脚本用来处理战场布置,代码如下。,usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassBattleManager:MonoBehaviour/*,角色的预制体,*/publicGameObjectarcherPre;/*,战场中的所有玩家,*/publicDictionarylist=newDictionary();/*,单例,*/publicstaticBattleManagerinstance;/*,皮肤,*/publicMaterialmat1,mat2;voidAwake()instance=this;,36,.,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);,37,.,6,实现战场管理功能,3.,添加清理战场方法,每次开启新战斗之前需要清理战场,包括清空玩家列表,恢复主摄像机的跟随状态,销毁所有角色和辅助物体(如准心)。,添加,ClearBattle,方法,代码如下。,publicvoidClearBattle()/,清除玩家列表,list.Clear();/,恢复主摄像机父级,Camera.main.transform.SetParent(transform);/*,销毁所有的角色,*/GameObjectheros=GameObject.FindGameObjectsWithTag(Archer);for(inti=0;i0)SetTarget(player);,为了让相机动态地变成新建角色的子物体,不能再用以前直接拖动的方式,而是用脚本去实现,新建,CameraTracePlayer,脚本,并添加到主相机上,代码如下。,49,.,Thank,YOU!,50,.,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服