游戏战斗双端交互过程
解释
- 登录(目前用现成的token就行,联调时会给),由于是调试阶段,登录后服务器会自动把客户端用户加入到一个area中。
- 进入战斗界面后,向服务器发送【area.playerHandler.queryToFight】请求(request)。
- 服务器会初始化battle数据并把battle返回(response)给客户端。
- 客户端使用battle数据初始化战斗场景,初始化完毕后向服务器发送【area.playerHandler.battleReady】通知(notify)。
- 当服务器收到【area.playerHandler.battleReady】通知(notify)时,会先检查当前战斗是否已经结束了,如果结束,会推送(push)一个【battleEnd】消息给客户端,附带战斗结算数据;若尚未结束,会推送(push)一个【battleRoundStart】消息给客户端。
- 客户端收到【battleRoundStart】消息时开始玩消消乐,消消乐结束后统计战斗加成数据,向服务器发送【area.playerHandler.injectBlockData】请求(request),如果收到【battleEnd】消息,则表示战斗已经结束,展示战斗结算数据,本场战斗结束。
- 服务器收到客户端消消乐数据后,开始战斗数值计算,并返回本回合战斗数据(包括战斗步骤、本回合战斗后各方状态)。
- 客户端收到回合战斗数据后,根据战斗步骤展示战斗动画效果,效果展示完毕后使用服务器给的战斗后各方状态更新客户端数据。然后向服务器发送【area.playerHandler.battleReady】通知(notify),开启下一回合。
code example:
//定义路由
var routes = {
queryToFight: 'area.playerHandler.queryToFight', //请求开始一场新的战斗
battleReady: 'area.playerHandler.battleReady', //请求开始新回合
injectBlockData: 'area.playerHandler.injectBlockData' //发送消消乐加成数据
};
//定义事件
var events = {
battleRoundStart: 'battleRoundStart', //战斗新回合开始事件
battleEnd: 'battleEnd' //战斗结束事件
};
//进入战斗场景后调用,请求开始一场新的战斗
pomelo.request(routes.queryToFight, {}, function(data) {
//data.battle是初始化的battle数据,用于初始化UI
//这里是初始化UI代码...
//UI初始化完毕,请求服务器开始新回合
battleReady();
});
//请求服务器开始新回合
function battleReady(cb){
pomelo.notify(routes.battleReady, {}, cb);
}
//客户端收到服务器的roundStart消息时,开始消消乐
pomelo.on(events.battleRoundStart, function(){
//此处是模拟消消乐数据
var blockData = {
character: {
fight: 0, //主角战斗力加成
recovery: 0 //主角回复力加成
},
energy: [0, 0, 0, 0, 0] //宠物技能能量加成
};
var param = {
data: blockData
};
//模拟消消乐过程,延迟5s发送消消乐数据
setTimeout(function(){
pomelo.request(routes.injectBlockData, param, function(data) {
//data.info是本回合战斗的具体数据
//展示战斗动画,更新相应数据代码...
//模拟展示战斗动画效果过程,2s后请求开始新回合
setTimeout(function(){
battleReady();
}, 2000);
});
}, 5000);
});