nodejs游戏源码解析:《球球大作战》的游戏循环

2017年7月6日 阅读:108

服务端程序中有3个定时器函数,前两篇解析的moveloop方法处理了玩家的移动,另外两个方法分别是gameloop和sendUpdates。其中gameloop负责排行榜和食物产生等逻辑。gameloop是在定时器中调用,相关语句为:setInterval(gameloop, 1000),即每秒执行1次。下图为游戏右上角的排行榜。

一、排行榜

gameloop先将user表按照重量大小排序,然后把前10名放到topUsers列表中,代码如下所示。

紧接着更新leaderboard列表,如果topUsers较之前有改变的话,就标记leaderboardChanged,这样可以减少不必要的消息 同步,只发送有更改的数据。

二、质量损失

如果小球质量较大,那么它会定时损耗质量,相关代码如下所示。

三、食物和病毒

最后gameloop调用balanceMass方法,它先计算现在场上所有食物和所有玩家的质量之和,然后看看食物会不会太少,如果太少则调用addFood添加食物,多了就减少一些食物。同理,也增加或减少一些病毒。

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

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

 

 

 

 

没有评论

评论已关闭。