分享一个使用Matchvs很实用的小技巧

最近用游戏服务器引擎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即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值