文/农夫与射手

前言:本Demo原来是Cocos Creator官方的一个Demo,本文章利用了第三方联网插件工具Matchvs将其改造成了一个三人对战的Demo(点击文末阅读原文,可获取在线体验地址)。

注意:

1.游戏满三人才可以开启,匹配成功后,玩家通过键盘AD键操纵小怪物向左向右移动抢摘星星。

2.下载Demo源码后,需用Cocos Creator打开工程(建议使用1.7.0及以上版本)。

游戏配置

Demo运行之前需要去Matchvs 官网配置游戏相关信息,以获取Demo运行所需要的GameID、AppKey、SecretID。如图:

133149ywwjz4vvtievtaqi.png
133150z6xf3hxmmahkx88k.png
获取到相关游戏信息之后,运行Demo,即可进入房间,准备开始游戏,如图所示:

133150rffom5spxlro451z.png
初始化SDK

在引入SDK之后,在初始化前需要先调用Matchvs.MatchvsEngine.getInstance()获取一个Matchvs引擎对象实例:

133151rvivvp8575pp4ijw.jpg
另外我们需要定义一个对象,该对象定义一些回调方法,用于获取游戏中玩家加入、离开房间、数据收发的信息,这些方法在特定的时刻会被SDK调用。

133152yfawisvnfwncohhf.jpg
为方便使用,我们把engine和reponse放到单独的文件Mvs.js中,使用module.exports将它们作为全局变量使用:

133152sivechizuupifh8l.jpg
其他文件可以用require函数引入engine和reponse:

133152oigcz40d8cizcxxl.jpg
完成以上步骤后,我们可以调用初始化接口建立相关资源。

133152uaajzeghax8x7qpj.jpg
注意 在整个应用全局,开发者只需要对引擎做一次初始化。

建立连接

接下来,我们就可以从Matchvs获取一个合法的用户ID,通过该ID连接至Matchvs服务端。

获取用户ID:

133153l3j488v083tkn43u.jpg
用户信息需要保存起来,我们使用一个类型为对象的全局变量GLB来存储:

133153g2cwfouu1cbbc2f1.jpg
登录:

133153nmpt2tjw8hlpltew.jpg
加入房间

成功连接至Matchvs后,立即随机匹配加入一个房间进行游戏。

代码如下:

133153lsayxuuyu9qyyjcm.jpg
停止加入

我们设定如果有3个玩家匹配成功则满足开始条件且游戏设计中不提供中途加入,此时需告诉Matchvs不要再向房间里加人。

代码如下:

133155e0eex6mmmuoezugk.jpg
在这里需要记下房间的用户列表,记入到全局变量GLB.playerUserIds中,后面要使用到。

发出游戏开始通知

如果收到服务端的房间关闭成功的消息,就可以通知游戏开始了。

133155hth27d1ti55yyith.jpg
133155iw9np9phllln7lll.jpg
游戏数据传输

游戏进行中在创建星星、玩家进行向左、向右操作时,我们将这些操作广播给房间内其他玩家。界面上同步展示各个玩家的状态变化。

其中星星是房主创建和展示,然后通知其他玩家,其他玩家收到消息后展示,相关的代码如下:

133156d2oklznl45t7kmnt.jpg
133157k4s0zzv4pd5i5lj6.jpg
玩家进行向左、向右操作时,这些消息会发送给其他玩家:

133157naema5a71kzzuom2.jpg
133158q99s9klarwkxexmq.jpg
133158j4zh4ss6f4vhf9s9.jpg
考虑到数据同步会有延迟,不同客户端收到的数据的延迟也会有差异,如果只在同步玩家左右移动的操作数据,那么过一段时间之后,不同客户端的小怪物位置可能会不一样,因此每隔一段时间还是需要再同步一次小怪物的位置、速度和加速度数据:

133158d9z449oxz91si4ol.jpg
133159s1cnpaao2ssvvh3s.jpg
最终效果如下:

133159g7vcf7viii9i2bgi.jpg
搞定。
via:游戏扶持by腾讯游戏学院


锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛