# ShootGame **Repository Path**: AFeng2016/ShootGame ## Basic Information - **Project Name**: ShootGame - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 53 - **Created**: 2020-03-25 - **Last Updated**: 2021-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README https://forum.cocos.org/t/fc/81272 老规矩先上图 本帖中使用的子弹系统即上次帖子中的子弹系统,不明白的点下面链接帖子 forum.cocos.com 重磅 - 子弹编辑器 源码分享 本次为大家分享由下列帖子中的子弹系统的修改版本(原版本为公司项目,无法分享) 首先我知道大伙无图无真相的,下面帖出效果图,录制软件是免费的,帧数比较少,如果想看效果则去码云开源项目 [图片][图片] [图片] [图片] 码云开源项目地址:https://gitee.com/pabble_561/ParticleSystem 如果有兴趣的下,下面开始是使用的一些简单教程... 然后下面是开源码云项目地址 https://gitee.com/pabble_561/ShootGame.git265 下面开始说明 服务器 先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配置(如果不懂是啥,请查看帖子上面的子弹系统),服务器分发后,客户端各自执行逻辑,因为有初始时间和实时时间,即可计算最终位置,子弹系统不上传到场景数据 地图逻辑==> 当自己的子弹销毁一个地图元素时,上传服务器分发,再上传到场景数据 同步逻辑遵守一点就是,所有子弹碰撞完后立即销毁,如果是自己的子弹则自己计算伤害上传到服务器。别人的子弹在我客户端无任意伤害,伤害的计算是由对方客户端上传后来我方只是展示。(本方式容易出现外挂,不过为了体验好,前期无所谓,等到了有了外挂的,都不知道赚了多少了,到时再考虑) 最后一些小注意,游戏内有一些小框架的东西,自己理会一下即可 然后就是,这是原来的一份半成品代码的删减版,有些地方不明白的,请多看代码,多看代码,多看代码重要的事说三遍 因为是半成品,所以地图也不全,逻辑到位就可以了