游戏战斗双端交互过程
解释
- 登录(目前用现成的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);});