牢骚
对于MMORPG游戏来说,首先无疑的是,所有的游戏逻辑、行为等实际上是由服务器计算,然后分发给各个客户端的。然而对于超大场景的,百人,千人同时在线的巨型地图来说,每次服务器更新后,把全地图所有的玩家、怪物等行为都推送给玩家这个操作都推送给每个客户端肯定是不现实的。
实际上,对于每个玩家来说,需要展示给他们的也就是屏幕大小那一块地方。然后另一个做法就是:
遍历所有玩家,针对每个玩家,遍历遍历所有怪物,然后判断....算了。。。。
信号塔模式
-
首先我们可以把整个世界分为N个小部分,每一部分设立一个“监控器”(信号塔)。这个监控器负责监视他的负责范围(每个小范围)内所有发生变化事件的行为。
监视范围之外的不负责、不发生事件行为的默认傻傻待机不推送。
每次更新世界之后,全世界发送的事件都会被统计到相应的信号塔中。 -
判断并分发信号塔所统计的事件消息给玩家:
如上图,黑框可以想象成用户手机也好其他也罢,首先需要看到,会有交叉行为的。所以想用户广播消息不是一个信号塔,而是一组信号塔。
比如上图,采用以用户所在的信号塔范围为中心(用户是那个小红点),向四周8个格子发散(算上所在信号塔共9个信号塔)。9个信号塔的消息都推送给这个用户(实际上4个,6个都可以,看你如何设计)。。
于是:
a: 用户只隶属于一个信号塔,及该用户所占的那个小区域的信号塔(注意边界划分)
b: 世界行为更新完毕,每个信号塔把自己监控到的事件行为数据,发送给这个信号塔的监控范围和其周围8个信号塔的监控范围内,所有的玩家。