11月18日 珠海源创会报名倒计时,红薯约你一起来聊聊开源技术~

梦想游戏人 / Balls

0 Watch 7 Star 11 Fork 2
加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
多人在线竞技手游 房间聊天,分裂,孢子 支持玩家动态加入,掉线重连,自动分配房间,观看录像等 展开 收起

http://www.dreamyouxi.com

取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.md 2.77 KB

#Balls(小球大作战) 多人在线竞技手游 房间聊天,分裂,孢子 支持玩家动态加入,掉线重连,自动分配房间,观看录像等

#服务端(C++)

  • 服务端代码采用原生socket编写
  • 房间自动创建,每个房间最大支持5人,可在Def.h 里面设置
  • 支持玩家动态加入。玩家动态加入的时候,服务器会把之前所有帧数据发送到该客户端,其他客户端会得到新玩家加入的广播
  • 广播分2种,一种是帧广播,一种是自定义msg广播,只有帧广播才会被记录(以供新加入的玩家读取)。
  • 服务器在非阻塞接受连接和收发消息,在一帧时间内轮训该帧信息,如果没有收到,那么默认客户端什么都没做,所有客户端帧数据的帧次由服务器收到时的帧次决定。
  • 和客户端交流的消息,暂时以明文传输,每条数据结尾都以'^' ,
  • 当客户端失去连接后,服务端的Player对象并不会销毁,客户端会主动发起重连信息,服务器会自动重新绑定Socket到该Player对象。并把掉线后到当前的帧数据发送到客户端,以供该我那家游戏继续运行。

#客户端(Unity)

  • 采用消息通知来实现Model和View的通信,内部有2种实现的数据结构,数组(int,在Event.cs 里面定义) 和hash table(string)通过重载的方式来区分,以供不同的性能需求
  • 网络采用帧同步来运算
  • 同步时如果某帧数丢失,会在100帧内尝试等待,如果还未收到,将会放弃本局比赛(可在BattleApp.cs 修改规则)
  • 如果一次性收到许多帧数据,那么会一直运算到最新帧才会显示UI,
  • 针对上条 已实现一个优化方案:当连续更新100帧后 强制 返回不处理,直接更新UI 进度,提示玩家加载了多少。
  • 提供异步加载(可显示进度),优化玩家体验。
  • 连接的IP Port 可在Config.cs设置
  • 地图的食物,采用了网格的思想来优化搜索,具体可在FoodsMgr设置

客户端录像

  • 录像实现方式是记录上局游戏收到的帧数据,然后模拟一个服务器定时 向内部服务发送数据,达到最小化修改之前的代码的目的
  • 由于同步机制,界面更新和逻辑更新是分开的,因此画面帧数可以随意设定而不影响游戏逻辑本身

#TODO

  • 压缩传输数据
  • 添加观战模式
  • 服务端跨平台(cpp h文件已设计好,待实现)
  • 录像云持久化,提供分享,查询,查看

.

项目点评 ( 0 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close