AOI的实现的优化过程
来源:互联网 发布:网络摄像头代理 编辑:程序博客网 时间:2024/05/10 14:21
由于正在开发的游戏涉及到10万个移动角色,如果单服10000玩家的话,采用双向循环查找,那就是10亿的量级,太恐怖了,不得不对算法做优化。
考虑以下场景:
1000*1000的地图
10000客户端角色
两个角色间的距离是10时,有效。
使用语言:java,版本1.6
随机生成10000角色的位置信息,然后计算哪些角色的信息需要发给范围内的客户端。
原始:使用最简单的双向查找算法,两重For循环, 每找到一个时数量+1,结果如下
找到40030个有效值,耗时880ms
优化一:很明显,位置是双向的, 也就是A在B的范围内,B也在A的范围内,因此只需要循环n*(n-1)/2次,优化结果耗时416ms
优化二:由于大部分的角色位置相距较远,因此对地图进行分区,以100为单位,整个地图被分成100个区域,创建区域数组Player[100][],然后计算每个客户端的更新范围所在的区域, 并将客户端加入到区域中,注意客户端的四个顶点可能在不同的区域上, 此时在几个区域就要加入几个区域。最后计算角色所在区域,并和区域内的Player计算距离。此算法得到的结果是22.5ms,为了避免java计时精度问题的影响,此处用了nanotime来计时。
优化三:区域大小用2^N来表示,从而在计算角色所在区域时可以用移位来处理,使用64作为区域大小,优化后平均耗时是:15.5ms
优化四:从算法的耗时来看,区域小一些,则区域数量变多,但每个区域内的角色数量就少了,需要计算的量也会变少,使用32作为区域大小后,耗时为:9.5ms
优化五:如果地图变大一些,角色更加稀疏,则计算量会更少,使用10000*10000的地图后, 同样64大小的区域,耗时是:1.8ms
自此,整个优化结束,基本满足需要。
考虑以下场景:
1000*1000的地图
10000客户端角色
两个角色间的距离是10时,有效。
使用语言:java,版本1.6
随机生成10000角色的位置信息,然后计算哪些角色的信息需要发给范围内的客户端。
原始:使用最简单的双向查找算法,两重For循环, 每找到一个时数量+1,结果如下
找到40030个有效值,耗时880ms
优化一:很明显,位置是双向的, 也就是A在B的范围内,B也在A的范围内,因此只需要循环n*(n-1)/2次,优化结果耗时416ms
优化二:由于大部分的角色位置相距较远,因此对地图进行分区,以100为单位,整个地图被分成100个区域,创建区域数组Player[100][],然后计算每个客户端的更新范围所在的区域, 并将客户端加入到区域中,注意客户端的四个顶点可能在不同的区域上, 此时在几个区域就要加入几个区域。最后计算角色所在区域,并和区域内的Player计算距离。此算法得到的结果是22.5ms,为了避免java计时精度问题的影响,此处用了nanotime来计时。
优化三:区域大小用2^N来表示,从而在计算角色所在区域时可以用移位来处理,使用64作为区域大小,优化后平均耗时是:15.5ms
优化四:从算法的耗时来看,区域小一些,则区域数量变多,但每个区域内的角色数量就少了,需要计算的量也会变少,使用32作为区域大小后,耗时为:9.5ms
优化五:如果地图变大一些,角色更加稀疏,则计算量会更少,使用10000*10000的地图后, 同样64大小的区域,耗时是:1.8ms
自此,整个优化结束,基本满足需要。
- AOI的实现的优化过程
- AOI服务器的实现
- AOI服务器的实现
- AOI 服务器的实现
- AOI 服务器的实现
- AOI 服务的设计与实现
- AOI 服务的设计与实现
- 十字链表的AOI算法实现
- 十字链表的AOI算法实现
- AOI的基本原理
- 游戏的AOI算法
- 游戏的AOI算法
- 游戏的AOI算法
- 游戏的AOI算法
- 开发笔记 (13) : AOI 服务的设计与实现
- 基于格子的AOI算法
- 基于格子的AOI算法
- 国产AOI与奥宝AOI的比较报告
- DataGrid,ItemEditors,ItemRender
- Oracle语句优化53个规则详解
- iis aspx常见错误 没有对“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files”的写访问权限。
- Spring的核心机制依赖注入简介
- dbms_application_info.set_session_longops过程的使用和v$session_longops
- AOI的实现的优化过程
- 基于ACE应用编程框架——线程池 - [ACE]
- MySQL 第一課
- Java编程那些事儿70——抽象类和接口(三)
- 创建em资料库的系列问题 ora-47999
- Deployment is out of date due to changes in the underlying project contents. You'll need to manually 'Redeploy' the project to u
- jsp+servlet+javaBean怎样实现分页
- J2me之怪现象收集
- Windows下精确到微秒的系统时间获取