用于存储平铺贴图节点的最佳容器

Best container for storing tile map nodes?

本文关键字:最佳 节点 存储 用于      更新时间:2023-10-16

我正在编程一个等轴测2D场景,其中我必须使用A*路径查找。最好是用一个向量来存储所有的瓦片节点(每次我请求"西-南相邻节点"时,都会计算它,并用一些数学方法检查它是否存在),还是我直接用指向9个相邻节点的指针来准备所有节点,如果它是一个界,则将其归零?这个选项有点消耗内存,但它值吗?

存储平铺映射节点的最佳方式是什么?通常是std::vector、std::list、custom?

使用网格映射,(一维)数组/向量可以完成任务。计算/检查邻居的"数学"非常简单。

您可以在地图周围添加"假"瓷砖,以简化/优化检查。

因此,对于3x3地图,您可以构建一个边界上具有不可通行瓷砖的5x5地图。

XXXXX
X...X
X...X
X...X
XXXXX

北/南:指数+/-5

东/西:索引+/-1

我建议使用您给出的每个节点存储9个指针的选项,每个指针指向一个邻居。除非你有大量的节点,否则在今天的硬件上,内存使用率将可以忽略不计,如果你可以轻松地将邻居返回到节点,而不是搜索你必须找到的每个节点,那么寻路会更快。

简而言之,内存使用率不会达到那么高,并且寻路速度会比其他方案更快。