最近用游戏服务器引擎Matchvs开发了一款游戏,发现他们家的API还是很丰富的,只是在使用的过程中发现需要监听的回调有些多,写起来很麻烦,就把回调封装了一些,记录下来,以后再其他项目中使用,同时分享给大家。
封装了房间内的玩家变动接口。
封装了包括 joinRoomResponse
, joinRoomNotify
,leaveRoomResponse
,leaveRoomNotify
,kickPlayerResponse
,kickPlayerNotify
。
新封装的接口名字叫做roomUserInfoListChangeNotify
这段代码是在matchvs官网的 creator-demo的基础上面写的。 把所有的回调接口都封装到一个类中使用。
/**
* 房间内玩家变化接口
* @param data 进入房间的数据
* @param action 动作类型 例如 加入 退出
* @param userID 执行动作的玩家
* @param ownerID 房间的房主ID
*/
MatchvsDemoResponse.prototype.roomUserInfoListChangeNotify = function (data,action,player,ownerID) {
switch (action) {
case "joinRoom":
userList = data;
userList.add(player);
break;
case "joinRoomNotify":
userList.add(player);
break;
case "leaveRoom":
if (player.userID === userList[i].userID) {
userList.length = 0;
break;
}
for(var i = 0; i < userList.length;i++) {
if (userList[i].userID === player.userID) {
userList.splice(i,1);
}
}
break;
}
userList.sort(MatchvsDemoResponse.prototype.sortNumber);
for(var i = 0; i < userList.length;i++) {
if (ownerID === userList[i].userID) {
MatchvsDemoResponse.prototype.swapArray(userList,i,0);
}
}
MatchvsDemoResponse.prototype.sendEventToUI(msg.MATCHVS_NETWORK_STATE_NOTIFY,{userList:userList,type:msg.MATCHVS_NETWORK_STATE_NOTIFY});
};
roomUserInfoListChangeNotify 其中引用的方法。
/**
* 全局发送消息
* @param action
* @param data
*/
MatchvsDemoResponse.prototype.sendEventToUI = function (action,data) {
let event = new cc.Event(action,true);
event["data"] = data;
cc.systemEvent.dispatchEvent(event);
};
/**
* 交换位置,把房主放到第一位
* @param arr
* @param index1
* @param index2
* @returns {*}
*/
MatchvsDemoResponse.prototype.swapArray = function(arr, index1, index2) {
arr[index1] = arr.splice(index2, 1, arr[index1])[0];
return arr;
},
/**
* 根据ID排序
* @param obj1
* @param obj2
* @returns {number}
*/
MatchvsDemoResponse.prototype.sortNumber = function(obj1,obj2) {
var userID1 = obj1.userID;
var userID2 = obj2.userID;
if (userID1 < userID2) {
return -1;
} else if (userID1 > userID2) {
return 1;
} else {
return 0;
}
};
下面用代码告诉大家怎么调用
/**
* 进入房间回调
* @param status
* @param userInfoList
* @param roomInfo
*/
MatchvsDemoResponse.prototype.joinRoomResponse = function (status, userInfoList, roomInfo) {
if (status === 200) {
console.log("进入房间成功");
userInfoList.roomID = roomInfo.roomID;
var player ={userID:GLB.userID,userName: GLB.name};
MatchvsDemoResponse.prototype.roomUserInfoListChangeNotify(userInfoList,"joinRoom",player,roomInfo.owner);
} else {
console.log("进入房间失败"+status);
}
};
然后在需要使用的地方监听 MATCHVS_NETWORK_STATE_NOTIFY
即可。