AOI( Area Of Interest )是网游服务器中必不可少要考虑的一个问题,当前主流的AOI算法依然是
基于2D的格子的, 场景均分成为等大的格子,每个Entity都根据其位置放到所属格子的链表中.
关键问题是当Entity移动后:
一是要找到该Entity看到了哪些新的otherEntitys,
二是要找到哪些otherEntitys以前可以看到而现在看不到了,
三是要找到该Entity被哪些新的otherEntitys看到了,
四是要找出以前看得到自己现在看不到自己的otherEntitys.
1, 假定所有Entity的看到见的格子的数量都一样,为N*N,这意味着自己看得见的Entity也一定看得见自己,而
自己看不见的Entity也一定看不见自己.因此当Entity移动后:
<1>,找出Entity移动后新增的可见格子,将这些格子中的其它Entity加入自己的可见列表中(或者通知客户端有新的Entity可见).
<2>,找出Entity移动前可见而移动后不可见的格子,将这些格子中的其它Entity从自己的可见列表中移除(或者通知客户端这些Entity不可见).
<3>,找出Entity移动后新增的可见格子,将自已加入到这些格子中的其它Entity的可见列表中(或者通知其对应的客户端有新的Entity可见).
<4>,找出Entity移动前可见而移动后不可见的格子,将自己从这些格子中的其它Entity的可见列表中移除(或者通知其对应的客户端本Entity不可见).
链接:http://www.cnblogs.com/corefans/archive/2009/07/23/1529699.html