Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5120116
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: 架构设计与优化

2016-03-04 14:06:06

这两天优化了一下一个Java页游服务器的AOI。其实这个优化纯属迫不得已,因为项目已经很久了,当时很多怪物还都是暗雷!!玩家在杀任务怪的时候,需要去地图里面乱转以碰见怪物。

      根据策划的要求,将怪物刷成明怪。就是要玩家看到,当然怪物不一定要动。,只是作为一个影像。既然是优化,那我就彻底优化一下喽;之前的广播是这样子做的,一个玩家的状态更新(比如说坐标更新,头衔更新,等)都是全场景广播,其他客户端根据接收到的广播验证坐标,再判断是不是需要处理这条消息!这样就造成了很大的浪费!这次我使用格子的思想进行优化!(或者说九宫格吧)

      这里有一个前提--可见关系----如果我能看到你,那么你也能看到我。根据游戏设计格子的大小,大概从30-60不等,可以调整;每个玩家在场景内即可看到周围九个格子的信息,包括里面的怪物和宠物。玩家自己状态的更新,要告知周围的玩家;而周围九个格子内的怪物或者玩家的状态更新,也要广播给这个玩家。这里还是要区分怪物和玩家,因为怪物对玩家可见,而玩家并不对怪物可见。为每个玩家每个怪物维护一个可见列表,即在自己的状态更新的时候,要将自己最新的状态告知这个列表上的玩家! 同时场景要记录每个格子上面的怪物和玩家,还可以添加npc或者宠物列表!

       

  基本流程:

      1:游戏服务器启动时候,要添加怪物到对应的格子中。

      2: 玩家登入时候,要获取周围九个格子的信息,并将自己,添加到格子中怪物和玩家的可见列表。同时将格子中的玩家,添加到自己的可见列表中。

      3:玩家走动时候,如果从一个格子走到了另一个格子,就要计算那些格子由可见变为不可见,并且解除与这些格子中怪物和玩家的可见关系。还要计算那些格子由不可见变为可见,那么就要和这些格子中的玩家建立可见关系。在上图做一个简单的展示,比如说玩家从红色小屋的位置走到橙色小屋的位置,那么紫色区域由可见变为不可见,而黄色区域由不可见变为可见。那么就要接触和橙色区域玩家的可见关系,而要和黄色区域的玩家建立可见关系!

      4:玩家登出时候,解除和周围九个格子中的玩家和怪物的可见关系!

注意事项:

      1:在计算格子由可见变为不可见或者由不可见变为可见,一定要注意边界关系

      2:由于我们的服务器是用线程池处理的,所以在维护场景格子怪物列表,格子玩家列表时候,一定要注意同步问题!

      3:怪物维护自己的可见列表,还可以做成主动怪物!!主动攻击玩家!

      原文链接

阅读(1501) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~