Moba实时pk大乱斗安卓版本出来了,大家可以直接下载体验了。。

image
视频预览链接:Moba实时pk大乱斗体验视频_哔哩哔哩bilibili

安卓apk安装包下载链接https://pan.baidu.com/s/1Pej2aeeIYlE5efjIR6286A?pwd=tjeo

moba全套源码,包含子系统:商城、排行榜、背包、签到、抽奖、英雄、强化、聊天、匹配3v3,接近成品,在这个项目可以再次基础上直接二开或者学习都可以的,moba 商城购买链接Cocos Store

  • 项目采用帧同步实现,帧同步相比状态同步的好处就是,流量消耗低,可实现细致的操控和打击感,天生支持录像回放,适合moba游戏。
  • MOBA实时pk采用后端java+netty+protoc,前端cocos creator 3.8.2。
  • 前后端实现protoc的自动生成,用户改网络协议后只需要点下cmd可执行文件即可,自动拷贝到对应的目录。
  • 项目数据配置文件采用json,由excel生成。
  • 使用excel可以快速高效的编辑数据,然后生成的json文件可以在程序中高效的读取。
  • 后端采用服务分离的方式 大厅服+战斗服,战斗服采用帧同步实现,服务器端只做消息转发,不计算战斗逻辑。由客户端计算战斗逻辑。客户端玩家无操作则不封包上传服务器,大幅度降低玩家流量,提高客户端性能。前后端有效代码加起来有15万多行。
  • 项目代码清爽工整简洁,易上手,适合学习、二次开发上线。
  • 在此项目基础上二次开发类似王者荣耀或者300大作战的产品,至少可节省半年的开发工作量。有了此项目的代码基础,可修改成其它任意类型moba游戏。

项目帧同步介绍

一、帧同步基础逻辑

  1. 客户端用于处理战斗逻辑,每隔66ms向服务器发送玩家操作数据,为了提升客户端的性能,改为玩家无操作则不向服务器发送数据

  2. 服务器只负责转发客户端操作,每隔66ms向同房间玩家同步所有玩家的操作数据

  3. 服务器收到玩家发送操作数据的同时将按照服务器的帧号将数据存起来

  4. 服务器将在n+1帧向玩家同步n帧操作数据,此时服务器也正在采集n+1帧玩家操作数据

  5. 客户端解析服务端发送的帧数据更新逻辑位置,渲染位置在update中一直插值平滑的追赶逻辑位置

二、浮点数问题

  1. 放大系数取整法 (小数误差一般都是在小数点最后几位,将玩家初始渲染位置放大然后取整,后面根据放大后的数据进行运算就可以了)

  2. 查表法 (三角函数sin、cos在不同平台下运算会有小数误差,可以将每个角度的x、y分量存在配置文件中,这样用的时候直接查就可以了,降低了运算上的消耗)

  3. 使用定点物理数学库,项目使用decimal.js,更多定点物理库可查看JS、TS最好用的定点数库

三、丢包问题

  1. 客户端丢包 没有太多影响,大家可以试试每秒能点多少下鼠标,是不是最多四次,而客户端采集操作帧率是66ms一次,相当于每秒采集15次,所以说即使当前帧因为网络不好丢失了,下一帧很快就能采集上的。
  2. 服务器丢包 客户端上传需要补发的帧号,服务器会立即补发丢失的帧操作

四、插值

渲染位置插值跟随逻辑位置,渲染旋转插值跟随逻辑旋转,使表现丝滑流畅。

五、断线重连

断线重连分大断线和小断线,大断线重连就是对局中杀死游戏进程,然后重新进入,就读取本地缓存的帧,加速播放,丢失的帧会请求服务器下发,直到追赶到最新的进度。小断线就是网络故障,然后又很快恢复了,游戏没退出,这个时候就是客户端会请求补帧,服务器会立即下发丢失的帧

六、预表现

预表现自己是根据客户端的实时操作进行预演,预表现其它玩家是根据玩家最后一次操作进行预演,然后根据服务器响应的权威操作进行和解,实现类似单机游戏的移动体验。

七、物理碰撞

帧同步不能使用引擎的物理库,因为会有浮点数误差问题,可能会导致不同步的。该项目是自己实现的定点数物理碰撞,消除了浮点数误差问题。

介绍项目结构

团队:4人,1个UI加原画,1个建模,2个全栈开发(1个精通客户端,1个精通服务端) 项目:前端使用CocosCreator3.8.2,后端使用java1.8 + netty + mysql + redis。 前后端使用protobuffer proto3语法,服务端同时提供HTTP/WebSocket/UDP支持JSON和二进制解析,目前在微信小游戏使用UDP。

image.png

目前登录注册匹配都归在大厅服进程,战斗服独立一个进程 客户端在大厅只跟大厅服连接,匹配成功后连接战斗服,断开大厅服,战斗结束后连接大厅服,断开战斗服。 客户端有AI,可以点自动战斗,电脑人也是AI自动战斗。

目录:

Art目录:

image.png

Doc目录:

image.png

Excel目录:

image.png

Tabels目录:

image.png

Proto目录:项目使用前先阅读/Src/Proto/README.docx

image.png

前端代码:

服务端大厅项目代码:

服务端战斗服代码:

windows开发用到的工具和Linux部署上线文档

游戏截图:

代码统计

后端代码统计

前端代码统计

moba 商城购买链接Cocos Store

4赞

之前购买过一版,居然下架不能更新了。这又弄出一版,现在商城都这样玩的吗?

你下单买肯定就是当前的版本,之前的版本资源可能有侵权就给下架了的。

五、断线重连

断线重连分大断线和小断线,大断线重连就是对局中杀死游戏进程,然后重新进入,就读取本地缓存的帧,加速播放,丢失的帧会请求服务器下发,直到追赶到最新的进度。小断线就是网络故障,然后又很快恢复了,游戏没退出,这个时候就是客户端会请求补帧,服务器会立即下发丢失的帧

弱弱的问一下 大断线重连 你是从第一帧开始追的吗?

我现在的这个项目大断线是从第一帧开始追的,因为现在客户端没有状态数据的,这里可以优化下的,就是客户端保存最后一帧的状态,这样就可以根据状态数据对游戏进行恢复的。这样会快很多的。

是啊 我也是想保持状态 保持不上去呀 太难了 ,不知道dota2 是怎么保存的
从第一针追 我担心半小时追不上 啊 哈哈~~

看你游戏对局时长了,如果10分钟左右,追帧还是很快的,如果是1个小时就追的比较慢了。

QQ截图20240603161947 如果丢失的是关键帧呢 例如掉血量,放技能

帧同步不会同步血量的,只会同步移动或释放技能操作的,掉血都是在各个客户端根据玩家的伤害和敌人的防御进行计算的,只需要保证各个客户端计算结果一致就可以了,然后放技能即使当前帧丢了也没关系的,因为采集帧是每秒15次进行采集的,你试试1秒能点几次鼠标,是不是差不多4次,也就是说,当前帧丢失了也没关系的,下帧很快就能采集上的。

看来,是时候直播帧同步相关的内容了。

期待123456

意思是说,如果使用帧同步的话,就不能采用改变线速度来改变玩家的这种方式对吗?
image

可以自己用定点数数学库去实现的。。