我有一个 map 的抽象表示,比方说,在 X 和 Y 坐标上有 5.000.000 个不同的整数坐标,所以它是一个非常大的二维矩形。
然后,在那个可变大小的矩形内,我有几个对象(角色、怪物、NPC)。玩家可以选择这个矩形的位置,我必须检查该位置上是否有怪物或角色。
到目前为止,我制作了一个名为 GameMatrix 的自定义类,其中包含列和行,并且所述列具有 3000x2000 个位置(角色的区域 View )。
当我的游戏玩家点击所述坐标时,我必须对矩阵内的每个元素执行 foreach()
,大多数时候它是空的。
有没有更好的方法来解决这个问题?具体来说,我问的是最好的方法是什么,有一个非常大的矩形和一个坐标,以有效的方式检查所述坐标内是否有对象。
忘记说了,但是这是在服务器端每毫秒完成几次的。所以我需要很多性能。
编辑:忘了说了,我用的是C#。
最佳答案
您应该使用四叉树实现,除非网格中的项目数量非常少(比如几十个项目),在这种情况下使用线性搜索(同时蛮力检查所有项目)可能是最好的选择。
看这里
http://en.wikipedia.org/wiki/Quadtree
请注意,可以非常快速有效地查询四叉树,但更新的成本更高一些,也就是说,如果您的项目在 map 上移动很多,那么为了获得良好的性能,这会变得更加复杂。
关于c# - 在一个非常大的矩形内保存一组坐标的最佳数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062820/