c# - 在一个非常大的矩形内保存一组坐标的最佳数据结构?

标签 c# algorithm data-structures game-engine

我有一个 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/

相关文章:

c#正则表达式查找并提取给定长度的数字

c++ - 二分无向图测试: Converting to check nodes with strings instead of integers

java - 如何反转这个从第 n 个元素到最后的链表

c# - 在注入(inject)之前在工厂中调用类的初始化方法是否是一个好的设计选项

c# - 使用匹配的大括号拆分字符串的最佳方法

algorithm - 生成子集的最有效方法是什么?

c# - 如何在C#中模拟元组和集合?

data-structures - Clojure 中的多态性

c# - WPF - 在鼠标悬停时使圆形按钮变大

algorithm - 尝试通过一个简单示例了解 Dijkstra 算法的工作原理