nodejs游戏源码解析:《球球大作战》的消息广播

2017年7月13日
5+
阅读:57

服务端程序中有3个定时器函数,前几篇分别解析了处理玩家移动的moveloop方法、以及处理排行榜、食物生成等游戏逻辑的gameloop。最后一个定时器函数为sendUpdates,调用语句是:setInterval(sendUpdates, 1000 / c.networkUpdateFactor),其中networkUpdateFactor默认值为40,即是每秒执行40次sendUpdates,处理消息的广播。sendUpdates会对每个玩家都做操作,具体的结构如下。

一、同步食物列表

那么看看foreach里面的内容,先获取对该用户可见的食物信息,这里通过范围判断,获取该用户视野范围内的食物,然后组合成visibleFood列表。后面只要把visibleFood的信息发送给该用户就好了,其他看不见的就不管了。

二、同步病毒列表

使用同样的方法计算可见的病毒,产生同步列表visibleVirus。

三、同步massFood列表

使用同样的方法计算可见的massFood,产生同步列表visibleMass。

四、同步其他玩家

用类似的方法计算玩家可以看到的其他玩家,因为其他玩家可能有多个分身,这里对每个分身做处理。如果分身在可见范围内,就把相关的信息放到visibleCells 列表里面。列表里包括玩家自己的信息和其他玩家的信息,如果是其他玩家,还要加上他们的名字和id。

五、发送数据

最后就是发送数据了,服务端发送serverTellPlayerMove协议,并且把可见食物、可见其他玩家部位、可见的mass和病毒发过去。如果排行榜发生了变化,还通过leaderboard协议把排行榜数据发送出去。客户端收到协议后,更新画面。

 

欢迎关注笔者出版的书籍《Unity3D网络游戏实战》,本书充分地讲解怎样开发一款网络游戏,特别对网络框架设计、网络协议、数据处理等方面都有详细的描述,相信会是一本好书的。

作者:碧俐千仞
转载请注明出处:http://weidublog.com/index.php/2017/07/13/101/

 

 

1 评论

  • borvest inkral 2017年9月6日在上午11:23

    Deference to article author, some wonderful information .

发表评论

电子邮件地址不会被公开。 必填项已用*标注