Architecture Design - NULL-HDU/Barrage_Frontend GitHub Wiki

总体架构图

all

该游戏分前后端,前端项目为 Barrage_Frontend,后端项目为 barrage-server

  • Barrage_Frontend 负责控制自身飞机、产生子弹、碰撞检测和游戏画面渲染。

  • barrage-server 负责维护游戏全局数据、伤害计算和分发游戏全局数据。

Barrage_Frontend 与 barrage-server 通过建立websocket连接相互传递数据。

1 Barrage_Frontend 架构图

frontend

Barrage_Frontend 共分3个模块:view、engine、socket。gamemodel为前端全局数据。

engine 主要有4个功能:

  • 控制 Socket 的解析与 View 的渲染的速度比例。
  • 进行 bullet 碰撞检查。
  • 接受用户的输入,包括键盘输入,鼠标左键输入以及鼠标轨迹的输入,用来控制飞机的技能发动,移动以及方向的变化
  • 对失效的子弹进行回收。

socket 负责将本地数据按照协议打包发送到后端,以及解析后端的数据并对gamemodel做相应的修改。

view 的主要作用是读取 gamemodel 中由前端 engine 创造并控制或由 socket 从后端读取并写入的各种 ball 的数据,然后在 canvas 中渲染绘制出来。

2 barrage 架构图

barrage

barrage-server 由4部分组成:User、Hall、Room、Playground。 User封装了一个websocket的链接,它接受并解析全端数据,并将数据传输到Room,它也提供发送给前端数据的api。 Room是接受User数据,根据数据类型做不同的处理。 Hall是一个特殊的Room,所有的User刚创建时都会被添加进Hall,它也能根据User的数据做不同的事。 Playground主要有两作用:

  • 管理并维护一个同一Room中所有User的全局数据
  • 计算并返回各个User应该接收到的数据包。

3 玩家进入游戏到结束游戏, socket 与 backend 的数据交流图

websocket

message type相关请查看Protocal文档

4 engine实现参考图

engine

5 backend模块依赖关系图

backend_module