项目作者: qq362946

项目描述 :
c# 实现的十字链表的AOI算法
高级语言: C#
项目地址: git://github.com/qq362946/AOI.git
创建时间: 2019-01-28T12:04:44Z
项目社区:https://github.com/qq362946/AOI

开源协议:

下载


1、AOI库介绍

  1. 使用跳跃表+十字链方式实现的一个AOI库。
  2. 可做简单的碰撞检测、客户端资源、服务器AOI。
  3. 测试效率插入、移动、查找均到毫秒一下。

1.1 一个简单的Demo

  1. // 创建一个AOI区域、如果地图过大可以定义多个区域
  2. var zone = new AoiZone();
  3. // AOI的显示区域、每个客户端都可以单独定义区域、这样可以更好的适用于不同的分辨率。
  4. var area = new Vector2(3, 3);
  5. // 添加50个玩家。
  6. for (var i = 1; i <= 50; i++) zone.Enter(i, i, i);
  7. // 刷新key为3的信息。
  8. zone.Refresh(3, area, out var enters);
  9. Console.WriteLine("---------------加入玩家范围的玩家列表--------------");
  10. foreach (var aoiKey in enters)
  11. {
  12. var findEntity = zone[aoiKey];
  13. Console.WriteLine($"X:{findEntity.X.Value} Y:{findEntity.Y.Value}");
  14. }
  15. // 更新key为3的坐标。
  16. var entity = zone.Refresh(3, 20, 20, new Vector2(3, 3), out enters);
  17. Console.WriteLine("---------------离开玩家范围的玩家列表--------------");
  18. foreach (var aoiKey in entity.Leave)
  19. {
  20. var findEntity = zone[aoiKey];
  21. Console.WriteLine($"X:{findEntity.X.Value} Y:{findEntity.Y.Value}");
  22. }
  23. Console.WriteLine("---------------key为3移动后加入玩家范围的玩家列表--------------");
  24. foreach (var aoiKey in enters)
  25. {
  26. var findEntity = zone[aoiKey];
  27. Console.WriteLine($"X:{findEntity.X.Value} Y:{findEntity.Y.Value}");
  28. }
  29. // 离开当前AOI
  30. zone.Exit(50);

2、博客文章

AOI算法实现和原理(一) AOI算法实现和原理(二)