[关闭]
@nullcc 2015-12-01T18:03:21.000000Z 字数 2047 阅读 1331

游戏战斗双端交互过程

Created with Raphaël 2.1.2客户端客户端服务器服务器初始化battle基础UI①request:请求开始battle添加player到area创建battle②response:{battle数据}battle数据注入展示UI③通知服务器初始化完毕,可以开始战斗初始化消消乐定时器④push:【battleRoundStart】消消乐阶段⑤request:{消消乐结果数据}验证消消乐数据进行战斗阶段数值计算⑥response:本回合战斗过程数据和战斗结果数据展示战斗动画渲染UI⑦notify:动画展示完毕,请求开始下一回合判断当前战斗是否已经结束【情况1:战斗未结束,回到④重复回合过程 开始新一回合】【情况2:战斗结束,进行战斗结算(胜负、经验、物品、升级),结束整个战斗push:【battleEnd】

解释

  1. 登录(目前用现成的token就行,联调时会给),由于是调试阶段,登录后服务器会自动把客户端用户加入到一个area中。
  2. 进入战斗界面后,向服务器发送【area.playerHandler.queryToFight】请求(request)。
  3. 服务器会初始化battle数据并把battle返回(response)给客户端。
  4. 客户端使用battle数据初始化战斗场景,初始化完毕后向服务器发送【area.playerHandler.battleReady】通知(notify)。
  5. 当服务器收到【area.playerHandler.battleReady】通知(notify)时,会先检查当前战斗是否已经结束了,如果结束,会推送(push)一个【battleEnd】消息给客户端,附带战斗结算数据;若尚未结束,会推送(push)一个【battleRoundStart】消息给客户端。
  6. 客户端收到【battleRoundStart】消息时开始玩消消乐,消消乐结束后统计战斗加成数据,向服务器发送【area.playerHandler.injectBlockData】请求(request),如果收到【battleEnd】消息,则表示战斗已经结束,展示战斗结算数据,本场战斗结束。
  7. 服务器收到客户端消消乐数据后,开始战斗数值计算,并返回本回合战斗数据(包括战斗步骤、本回合战斗后各方状态)。
  8. 客户端收到回合战斗数据后,根据战斗步骤展示战斗动画效果,效果展示完毕后使用服务器给的战斗后各方状态更新客户端数据。然后向服务器发送【area.playerHandler.battleReady】通知(notify),开启下一回合。

code example:

  1. //定义路由
  2. var routes = {
  3. queryToFight: 'area.playerHandler.queryToFight', //请求开始一场新的战斗
  4. battleReady: 'area.playerHandler.battleReady', //请求开始新回合
  5. injectBlockData: 'area.playerHandler.injectBlockData' //发送消消乐加成数据
  6. };
  7. //定义事件
  8. var events = {
  9. battleRoundStart: 'battleRoundStart', //战斗新回合开始事件
  10. battleEnd: 'battleEnd' //战斗结束事件
  11. };
  12. //进入战斗场景后调用,请求开始一场新的战斗
  13. pomelo.request(routes.queryToFight, {}, function(data) {
  14. //data.battle是初始化的battle数据,用于初始化UI
  15. //这里是初始化UI代码...
  16. //UI初始化完毕,请求服务器开始新回合
  17. battleReady();
  18. });
  19. //请求服务器开始新回合
  20. function battleReady(cb){
  21. pomelo.notify(routes.battleReady, {}, cb);
  22. }
  23. //客户端收到服务器的roundStart消息时,开始消消乐
  24. pomelo.on(events.battleRoundStart, function(){
  25. //此处是模拟消消乐数据
  26. var blockData = {
  27. character: {
  28. fight: 0, //主角战斗力加成
  29. recovery: 0 //主角回复力加成
  30. },
  31. energy: [0, 0, 0, 0, 0] //宠物技能能量加成
  32. };
  33. var param = {
  34. data: blockData
  35. };
  36. //模拟消消乐过程,延迟5s发送消消乐数据
  37. setTimeout(function(){
  38. pomelo.request(routes.injectBlockData, param, function(data) {
  39. //data.info是本回合战斗的具体数据
  40. //展示战斗动画,更新相应数据代码...
  41. //模拟展示战斗动画效果过程,2s后请求开始新回合
  42. setTimeout(function(){
  43. battleReady();
  44. }, 2000);
  45. });
  46. }, 5000);
  47. });
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注