Demo简介
本游戏使用Matchvs的实时联网SDK和白鹭Egret开发,并提供了简洁的Demo来展示多人实时联网游戏的开发过程和效果,用于演示多人匹配、数据传输、帧同步、创建房间、获取房间列表、消息订阅、断线重连、修改房间属性等功能。
目录
┌─── matchvs 支持 Egret SDK库文件
├─── matchvs_wx 支持微信小游戏的SDK库文件
├─── MatchvsDemo_Egret Demo 工程
└─── README.md
Demo下载和体验
注意:下载Demo源码后,需要使用Egret的Wing打开工程(Wing建议使用4.1.0以上的版本,Egret引擎建议使用5.1.5以上版本)。满三人才可以开始游戏,使用三个不同的浏览器运行。Demo支持三人同时游戏,匹配成功后,玩家通过按住按钮左右滑动来推动小鸭子向左向右移动抢足球。
Demo配置
Demo运行之前需要去 Matchvs 官网 配置游戏相关信息,以获取Demo运行所需要的GameID、AppKey、SecretID。如图:
获取到相关游戏信息之后,Demo 代码里在 LoginView.ts
文件下配置游戏信息,如下图:
如果不了解Login这个函数的参数请到官网查看相关的 API接口说明 文档。
注意: 如果运行不成功请查看 egretProperties.json 文件是否配置了加了如下配置:
{ "name": "matchvs", "path": "../matchvs" }
注意:如果是要发布成微信小游戏应该吧 path 下面的 ../matchvs 改为 ../matchvs_wx, 如下:
{ "name": "matchvs", "path": "../matchvs_wx" }
把游戏信息配置好就可以运行试玩,Demo运行界面如下,可以点击随机匹配开始:
初始化SDK
在引入SDK之后,在初始化前需要先调用 MatchvsEngine()
获取一个Matchvs引擎对象实例:
public static engine:MatchvsEngine = new MatchvsEngine();
另外我们需要定义一个 MatchvsResponse
对象,该对象定义一些回调方法,用于获取游戏中玩家加入、离开房间、数据收发的信息,这些方法在特定的时刻会被SDK调用。
public static response:MatchvsResponse = new MatchvsResponse();
为方便使用,我们把engine,reponse 以及以下其他全局变量放到单独的文件 GameData.ts 中。文件路径在Egret工程的src目录下面。完成以上步骤后,我们可以调用初始化接口建立相关资源。相关代码在LoginView文件。
private onButtonClick(e: egret.TouchEvent) {
GameData.response.initResponse = this.initResponse.bind(this);
GameData.gameID = Number(this._gameidInput.text);
console.log(" environment="+ this._environment + " gameid="+ GameData.gameID);
//这里调用初始化
let result = GameData.engine.init(GameData.response, GameData.CHANNEL, this._environment, GameData.gameID);
console.log("mvs.init result:" + result);
}
注意 在整个应用全局,开发者只需要对引擎做一次初始化。
建立连接
接下来,我们就可以从Matchvs获取一个合法的用户ID,通过该ID连接至Matchvs服务端。
获取用户ID:
//LoginView.ts
GameData.response.registerUserResponse = this.registerUserResponse.bind(this);
var result = GameData.engine.registerUser();
if (result !== 0) {
console.log('注册用户失败,错误码:' + result);
} else {
console.log('注册用户成功');
}
private registerUserResponse(userInfo:MsRegistRsp) {
//注册成功,userInfo包含相关用户信息
}
用户信息需要保存起来,我们使用一个类型为对象的全局变量GameData.userInfo来存储
GameData.userInfo = userInfo;
登录:
//LoginView.ts
GameData.response.loginResponse = this.loginResponse.bind(this);
var result = GameData.engine.login(userInfo.id, userInfo.token,200757, 1,