坦克大战如何设置显卡(帧同步坦克大战匹配系统)

在介绍匹配系统之前,先说一下项目的整体结构。

项目主要有四个场景: start --> home --> choose --> game

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(1)

start_scene: 是游戏的开始场景,在此场景主要做了微信授权,获取用户的昵称,头像等信息。通过云函数获取用户的openId(不了解云函数的可以参考这篇文章:http://mp.weixin.qq.com/s?__biz=MzU3NTg5OTcyNQ==&mid=100000114&idx=1&sn=da9a127751e8050f3c52caa4ea1069f2&chksm=7d1d50504a6ad946f6a37c2a9a79e22774609e4594db9d7bb89a0247c035438800773c67aea9#rd)。然后把用户的信息和用户的openid都放到全局对象Global里边,方便以后使用。

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(2)

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(3)

home_scene: 授权成功之后,就跳转到此场景。

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(4)

进入此场景之后,需要初始化MGOBE框架的SDK。

首先,设置SDK所需要的参数值(gameId , openId, secretKey, server,从控制台获取),并放入缓存中。

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(5)

initListen函数做的就是初始化Listener,并创建房间实例,给房间添加监听。截取主要代码如下:

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(6)

初始化完成之后,就可以选择1V1,3V3。目前3V3其实我现在设置的是2V2,没有实际去测效果,但是计算坦克的初始位置的时候,把这种情况考虑进去了,这个到帧同步时再细讲。

choose_scene: 选择1V1或者3V3之后,就会进入此场景。其实,目前来讲,choosescene完全可以和homescene合并为一个场景。在此,我说明一下为什么把它们分开。

因为,之前我设想的是,在这个场景可以由玩家自由选择坦克类型什么的,选择好之后,由玩家手动点击匹配。同时,也可以在玩家匹配成功之后,显示所有对战玩家的对局信息,类似于王者荣耀进入游戏之前的那个场景。这是为了以后,拓展功能方便。比如以下这种:

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(7)

现在省略掉这些优先级较低的环节。因此,进入choose_scene场景之后,就直接发起匹配。

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(8)

发起匹配之前,我们需要在MGOBE控制台创建一个匹配规则。

首先,在控制台左侧菜单【房间管理】,找到【匹配规则集】

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(9)

新建规则集,填写规则集名称和规则集内容。名称随意填就好,规则集内容是一个json。它的结构是这样的:

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(10)

我以当前坦克大战的规则集为例,解释一下各个字段的含义。

{ "version": "V1.0", //版本号,一般填V1.0就可以 "teams": [ { "name": "1v1", // 名称1v1 "maxPlayers": 1, //每支队伍的最大玩家数量为1 "minPlayers": 1, //每支队伍的最小玩家数量为1 "number": 2 //总共有两支队伍 } ], "playerAttributes": [ { "name": "lv", //等级,匹配时需要传入此参数 "type": "number" //属性的类型,目前暂时仅支持number } ], "rules": [ { "type": "deviation", //匹配规则的类型:当前为误差规则 "expression": "teams[i].players.lv", //依据玩家等级组队 "value": 5, //表示所有玩家之间等级相差不能超过5 "waitTimeSteps": [ { "waitTimeSeconds": 10, //等待10秒若匹配不上,则放宽规则 "value": 10 //把等级差放宽为10 } ] } ], "timeout": 15 //全局匹配超时时间 }

更复杂的匹配规则,可以参考官方文档:https://cloud.tencent.com/document/product/1038/34952

规则集创建完之后,就需要创建匹配code了。左侧菜单【房间管理】,找到【在线匹配】。右侧新建匹配,填写描述信息,匹配规则选择刚才我们创建的那条匹配规则集。

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(11)

点击确定之后,就会分配一个匹配code,这个code就是调用发起匹配API需要传入的一个参数。

现在,可以调用room.matchPlayers方法发起匹配了。匹配超时之后,会弹出超时的对话框,可以选择重新匹配,或者取消匹配退出匹配队列。取消匹配,会返回到home_scene场景。(超时对话框是我从cocos论坛找的UI,结合自己需要改的)

坦克大战如何设置显卡(帧同步坦克大战匹配系统)(12)

至此,整个匹配的主要流程就讲完了。查看完整代码,在公众号回复关键字“帧同步”即可获取。

说明一下:

  1. 目前MGOBE匹配支持两种模式,房间匹配和玩家自由匹配。房间匹配采用的是类似于棋牌游戏,一个玩家开房,然后邀请其他玩家进来游戏,或者其他玩家通过房间匹配进来。所有玩家准备之后,开始进行游戏。而玩家自由匹配,是指所有玩家进行的单人匹配。因此,目前框架不支持类似于王者荣耀那样的组队匹配。之前,有联系过他们的产品,说以后会上线此功能。
  2. 帧同步,所有逻辑都在客户端完成,因此不需要在服务端写额外的代码。这样一来,有好处也有坏处。好处就是我们不用关心服务端的实现,坏处就是灵活性不够强,很多问题,只能通过在客户端想办法来实现。另外,此框架有个需要注意的地方就是,在这种情况下,也需要下载实时服务器的代码(即服务端),然后发布到实时服务器。操作流程可查看官方文档。
  3. 框架所有的API都可以在 MGOBE.t.ds文件里找到相对应的解释和使用方法。因此,多看此文件会让你更加熟悉整个框架。
  4. 代码中有很多被注释掉的代码。有的是为了不让之前的代码影响到现在的逻辑,有的是在调试过程中,为了对比各种实现方式而留下的。忽略即可。
  5. 代码下载下来可以用cocoscreator 2.0.10 直接跑起来,暂时用我的服务器参数就可以。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页