互通游戏源码-全套源码丨超实用单人在线对战游戏开发分享,拒绝被困!

手游市场高度同质化的趋势下,随着各手机厂商纷纷布局智能大屏、平板、PC等不同形态的设备,强调系统和生态端的场景协同已成为刚需为发展。 多端协作游戏注重游戏体验本身互通游戏源码,带来玩法上的更多可能性。

Cocos 官方演示团队推出单人实时在线对战游戏《别碰我的金币》。 项目完全开源,包括项目源码、美术资源、规划文档(核心逻辑、技能设置、UI说明),支持Cocos Creator 3.3。 2、点击文末【阅读原文】跳转至下载地址。

游戏中,玩家使用虚拟控制器来控制角色进行交流和吞咽金币。 获得的金币越多,角色的体积越大,移动速度越慢。 玩家还可以捡起场上随机掉落的锤子,攻击对手,让对手损失一半金币。

这是官方产品。 项目结构和代码质量不用多说,持有《幽灵天秤座》的朋友应该都明白。 《别碰我的金币》项目源码在结构上分为逻辑层和表现层。 相信可以为您在进行游戏项目结构管理时提供一些思路和参考。

网络游戏一直是游戏市场的热门品类之一。 去年互通游戏源码,老王还写了一款网络对战卡牌游戏《快乐老鼠吃象》。 不过,由于项目前期没有考虑到玩家崩溃、断线重连、时间同步等需求,所以我们走了很多弯路……所以这次,我们先从在线同步的实现开始看看《别碰我的金币》有哪些技术方案可以参考。

在线同步

游戏服务器采用腾讯云游戏在线对战引擎(MGOBE)。 开发者无需关注底层网络架构、网络通信、服务器扩缩容、运维等,即可获得就近访问、低延迟、实时扩展。 高性能在线对战服务。

游戏在线对战引擎-腾讯云:

在项目中,我们还封装了一个名为mgobeUtil.ts的文件。 通过调用相关套接字,可以快速实现添加卧室、房间管理、帧同步等相关功能。

接下来说一下游戏的同步逻辑。 研究源码后惊讶地发现,这个游戏通过MgobeUtil.instance.sendFrame方法只发送三种类型的波浪:移动、停止、攻击,并且连接时只传递一个参数:前进方向。

这样真的能保证多方同步吗?

Demo Team的设计思路是:

游戏开始时,地图上的障碍物、人物、道具的数量和位置都是固定的。 游戏过程中,利用服务器提供的随机数种子来估算道具的刷新时间和位置,以保证所有玩家设备上的道具刷新时间和位置一致。

角色在游戏中的连接速度是通过角色当前头上的金币数量来估算的,因此连接时只需要传输角色的方向。 角色是否受到碰撞影响将通过局部碰撞检查来估计。 但网络波动、断线重连等情况可以通过补充帧来处理。

因此,游戏实现了多设备的实时同步,同时只分发极少量的信息。

互补框架问题

作为帧同步游戏,玩家需要注意网络波动、断线重连等造成的补帧问题。 MGOBE提供了手动补框的方法,但也存在失败的可能性。 这时,Room对象在onAutoRequestFrameError接口中提供了反弹,那么我们需要调用帧填充方法。

在实际使用中我们发现使用自动补帧更为安全。 在方法中我们需要传入两个参数:

收到服务器提供的这个补充帧信息后,游戏就可以继续进行。

另外,断线重连后的同步也可以通过补帧来完成。 调用自动补帧方法时,将beginFrameId设置为1,获取从第一帧到最新帧的帧同步数据,这样可以快速恢复游戏的最新状态。 开发者还可以选择最后一帧数据进行快进显示,以便玩家在重新连接后能够快速返回到游戏状态。

生成道具

游戏中的道具有两种:金币和锤子。 游戏开始时,执行initProps方法,在固定位置生成初始道具。

道具也需要在游戏过程中随机生成。 以锤子为例,我们希望玩家拿起锤子后3秒,地图上会生成一个新的锤子。 如何才能实现这一目标?

首先,在MGOBE的RoomInfo房间属性中,我们提供startGameTime开始帧同步时的时间戳和frameRate帧速率。 我们可以利用它们来推断当前第n帧的帧时间frameTime,以防止网络延迟造成的时间问题。 不完全是。

如果需要创建锤子时帧时间frameTime小于createHammerTime,则调用generateProp函数生成锤子道具数据,保存在currentGameState.props道具信息字段中,并使用对应的虚拟锤子节点来测量碰撞被生成。

当currentGameState.props数据更新时,通过updateState更新场景状态,在地图上相应位置生成道具。

交叉检查

我们来看看游戏在不使用化学引擎的情况下如何判断角色是否与场景中的障碍物或道具发生碰撞。

首先是角色与障碍物的碰撞判定。 地图障碍物由16个Cube组成,如图所示,查看图中的showMesh,可以看到障碍物的MeshComponent。

当角色连接时,会调用_intersectWithObstacle函数来判断是否会遇到地图上的障碍物。 _intersectWithObstacle 的核心逻辑是衡量两个节点的 modelComponent 组件是否相交。 通过传入角色节点,获取modelComponent,然后遍历场景中的障碍物获取modelComponent,并与玩家的modelComponent进行相交检查。 如果它们不相交,角色可以继续交流。

其次是角色与道具之间的碰撞判定。 当角色连接时,会调用handleProp函数来遍历地图中的props,检查是否与角色相交。 如果角色与金币相交,则分数加1。如果角色与锤子相交,则获得锤子。 地图上的锤子道具消失,锤子的创建时间刷新。

一旦角色拿起锤子,它就可以用力量攻击其他玩家角色。 当玩家点击设备上的攻击按钮时,就会通过帧同步的方式调度角色攻击动作风暴。 逻辑层收到攻击动作后将执行checkAttack技术。 当满足攻击条件时,角色会播放攻击动画,角色拥有的锤子数量会减少1; 并且被击中的角色会播放击中动画,扣除积分,并调用dropCoins方法在角色附近掉落金币。

除了上面提到的几点之外,游戏还实现了手柄控制连接玩家、微信平台玩家通过分享链接访问游戏等,有需要的朋友可以查看源码,应该能够收获颇丰。

Cocos 官方演示团队推出了多款游戏源码,同时邀请各界专家陆续输出配套文字/视频教程。 您可以在公众号后台回复游戏名称(如:Ghost Twins)即可获取相关游戏全套资源链接。

自主开发源码清单

3D拍摄《鬼鳞》

io 3D《奔跑吧小仙女》

3D冒险《奔跑的巨人》

3D金币推《金币推推推》

经典2D消除《天天消除》:

《别碰我的金币》9.9 限时 10% 折扣发售。 扫描下方二维码进入Cocos官方在线商店或点击文末【阅读原文】前往Cocos商店下载!

前往Cocos商店下载源码

双十二年终特卖来了!

>> 点击查看嘉宾及演讲主题

12 月 18 日下午 14:00,Cocos 开发者沙龙“厦门站”将在厦门香格里拉大酒店举行。 Cocos引擎、亚马逊云科技、网易易盾、青瓷游戏、风灵科技为开发者们策划了一场聚焦引擎技术与生态、游戏开发与发行等的盛会。

报名并来到现场的朋友还将获得“Cocos最新定制周边礼包”,人人一份! 扫描下方二维码免费注册↓

>> 开发者申请通道

过往亮点

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 互通游戏源码-全套源码丨超实用单人在线对战游戏开发分享,拒绝被困! https://www.wkzy.net/game/195386.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务