【源码分享】仿FC多人联机射击游戏

老规矩先上图


本帖中使用的子弹系统即上次帖子中的子弹系统,不明白的点下面链接帖子
https://forum.cocos.com/t/topic/81156
##然后下面是开源码云项目地址##
https://gitee.com/pabble_561/ShootGame.git

下面开始说明

#服务器#
先npm install --save,然后运行Game.js,即node Game.js,
出现下图即为运行成功

#客户端#
楼主版本ccc 2.0.4,因为用到了新版的tiledmap所以1.9版本的无法使用,高版本的请自行适配
##如何进入游戏?##
打开Main.fire,直接运行得到如下界面

点击1P或2P直接参加游戏,进去后的标准界面
可直接用WASD操作


每个图块上都有红框是因为打开了碰撞检测的绘制。
下面对游戏的主要模块进行简单的介绍
###GameManager###
游戏总管理,只负责消息分发到各个子管理类,或者断线后如何登陆重连消息
###RoleManager###
角色管理,负责根据GameManager的消息来实时更新场景上的角色,创建,移动,销毁等
###MapManager###
TildMap地图管理,负责地图的中的每一块的添加和移除逻辑,重点是断线重连后的更新,地图滚动和大地图的添加隐藏逻辑
###ColliderManager###
碰撞检测管理,针对于场景上的已有的BoxCollider计算碰撞和绘制碰撞区域,成功变量debugDraw为控制是否绘制

###游戏同步###
本游戏主要同步角色移动,子弹和地图。
地图的同步和子弹都是事件类型的
而玩家的移动是实时类型的
所以同步都比较简单,所以采用的状态同步。因为人数少操作也少,也没有使用帧同步。服务器中有帧同步代码,但是弃用了。
同步逻辑为:
进入游戏、断线重连后、或中断加入游戏的,先拉取场景数据来同步自己的场景。然后再执行逻辑
玩家移动==> 客户端有修改时,上传方向消息,服务器分发,然后将自己位置上传至场景数据
玩家子弹==> 发射子弹时向服务器发送ParticleSprite配置(如果不懂是啥,请查看帖子上面的子弹系统),服务器分发后,客户端各自执行逻辑,因为有初始时间和实时时间,即可计算最终位置,子弹系统不上传到场景数据
地图逻辑==> 当自己的子弹销毁一个地图元素时,上传服务器分发,再上传到场景数据
同步逻辑遵守一点就是,所有子弹碰撞完后立即销毁,如果是自己的子弹则自己计算伤害上传到服务器。别人的子弹在我客户端无任意伤害,伤害的计算是由对方客户端上传后来我方只是展示。(本方式容易出现外挂,不过为了体验好,前期无所谓,等到了有了外挂的,都不知道赚了多少了,到时再考虑)

最后一些小注意,游戏内有一些小框架的东西,自己理会一下即可
然后就是,这是原来的一份半成品代码的删减版,有些地方不明白的,请多看代码,多看代码,多看代码重要的事说三遍
因为是半成品,所以地图也不全,逻辑到位就可以了

23赞

感谢大佬分享

1赞

大佬是否能讲解下客户端帧同步的逻辑? 代码应该怎么写?

我加载了以后报了一个错误。
load script [wy-Common] failed : Error: Cannot find module ‘wy-Common’
缺少了这个模块,但是不知道去哪里找,我第一次用cocos这个软件。这个模块去哪里下载呢?

mark

感谢大佬分享~ 话说大佬都不用TypeScript的么。。

1赞

mark+++

感谢分享!!

mark!!

联机游戏都没人关注吗

大佬牛逼,膜拜一波

mark

这么好的游戏我居然没有评论,不应该啊

1赞

顶大佬

Mark

感谢大佬分享:kissing_heart:

MarkMark

战略强势插眼–去重小尾巴

先mark一波

1234