我正在编写等距2D场景,我将不得不使用A *寻路。有一个向量来存储所有tile节点更好(每次我请求“West-South相邻节点”计算它并检查它是否存在一些数学),或者我直接用指向9个相邻节点的指针准备所有节点如果它是一个约束,并将它们归零?这个选项有点耗费内存,但值得吗?
一般存储tile map节点的最佳方法是什么,std :: vector,std :: list,custom?
答案 0 :(得分:2)
使用网格图,An(一维)数组/向量可以完成工作。 计算/检查邻居的“数学”非常简单。
您可以在地图周围添加“假”瓷砖,以简化/优化支票。
因此,对于3x3地图,您可以构建一个5x5地图,边框上有无法通行的图块。
XXXXX
X...X
X...X
X...X
XXXXX
北/南:指数+/- 5
东/西:指数+/- 1
答案 1 :(得分:0)
我建议使用你给每个节点存储9个指针的选项,每个节点都指向一个邻居。除非你有巨大的数量的节点,否则今天的硬件上的内存使用量可以忽略不计,如果你可以轻松地将邻居返回节点,而不是搜索你必须找到每个节点。
简而言之,内存使用量不会 高,并且寻路速度会比其他方案更快。