AStar2D
使用二维向量作为边缘的AStar类表示。
描述
这是AStar类的包装,该类使用2D向量而不是3D向量。
方法
方法说明
计算两个连接点之间的成本时调用。
注意这个函数隐藏在默认的AStar2D
类中。
当估计一个点和路径终点之间的成本时调用。
请注意,这个函数隐藏在默认的 AStar2D
类中。
在给定的位置添加一个新的点,并使用给定的标识符。id
必须是0或者更大,weight_scale
必须是1或者更大。
在确定从相邻点到此点的一段路程的总成本时,weight_scale
要乘以_compute_cost的结果。因此,在其他条件相同的情况下,算法优先选择weight_scale
较低的点来形成路径。
var astar = AStar2D.new()
astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with weight_scale 4 and id 1
如果已经存在一个给定id
的点,它的位置和权重将被更新为给定值。
返回给定点之间是否有连接/分割。
- void clear ( )
清除所有点和线段。
在给定的点之间创建一个分段。如果 bidirectional
为 false
,则只允许从 id
到 to_id
之间的移动,不允许反方向移动。
(codeblock)
var astar = AStar2D.new()
astar.add_point(1, Vector2(1, 1))
astar.add_point(2, Vector2(0, 5))
astar.connect_points(1, 2, false)
删除给定点之间的线段。
- int get_available_point_id ( ) const
返回没有关联的下一个可用点的ID。
返回离to_position
最近的点的ID,可以选择将禁用的点考虑在内。如果点池中没有点,返回-1
。
注意: 如果几个点都是离to_position
最近的点,将返回ID最小的那个点,以保证结果的确定性。
返回位于两个连接点之间的线段中离 to_position
最近的位置。
var astar = AStar2D.new()
astar.add_point(1, Vector2(0, 0))
astar.add_point(2, Vector2(0, 5))
astar.connect_points(1, 2)
var res = astar.get_closest_position_in_segment(Vector2(3, 3))# 返回 (0, 3)
结果是在从 y=0
到 y=5
的线段中。它是该段中离给定点最近的位置。
- PoolIntArray get_id_path ( int from_id, int to_id )
返回一个数组,该数组中包含了由 AStar2D 在给定点之间找到的路径的点的 ID。数组从路径的起点到终点排序。
var astar = AStar2D.new()
astar.add_point(1, Vector2(0, 0))
astar.add_point(2, Vector2(0, 1), 1) # 默认权重为 1
astar.add_point(3, Vector2(1, 1))
astar.add_point(4, Vector2(2, 0))
astar.connect_points(1, 2, false)
astar.connect_points(2, 3, false)
astar.connect_points(4, 3, false)
astar.connect_points(1, 4, false)
var res = astar.get_id_path(1, 3) # 返回 [1, 2, 3]
如果你把第 2 点的权重改为3,那么结果就会变成 [1, 4, 3]
,因为现在虽然距离长了,但通过第 4 点比通过第 2 点“容易”。
- int get_point_capacity ( ) const
返回支持点的结构的容量,与 reserve_space
配合使用。
- PoolIntArray get_point_connections ( int id )
返回一个数组,其中包含与给定点形成连接的点的 ID。
var astar = AStar2D.new()
astar.add_point(1, Vector2(0, 0))
astar.add_point(2, Vector2(0, 1))
astar.add_point(3, Vector2(1, 1))
astar.add_point(4, Vector2(2, 0))
astar.connect_points(1, 2, true)
astar.connect_points(1, 3, true)
var neighbors = astar.get_point_connections(1) # 返回 [2, 3]
- int get_point_count ( ) const
返回当前积分池中的积分数量。
- PoolVector2Array get_point_path ( int from_id, int to_id )
返回一个数组,该数组包含了AStar2D在给定点之间找到的路径中的点。该数组从路径的起点到终点排序。
注意: 这个方法不是线程安全的。如果从一个Thread线程中调用,它将返回一个空的PoolVector2Array,并打印一个错误信息。
返回与给定id
相关联的点的位置。
返回与给定id
关联的点的权重比例。
- Array get_points ( )
返回所有点的数组。
返回与给定id
相关联的点是否存在。
返回是否禁用点以进行寻路。默认情况下,所有点均处于启用状态。
- void remove_point ( int id )
从积分池中删除与给定id
关联的积分。
- void reserve_space ( int num_nodes )
在内部为num_nodes
个点保留空间,如果您一次要添加一个已知的大量点(例如对于一个网格),则很有用。新容量必须大于或等于旧容量。
禁用或启用指定点的寻路功能。用于制作临时障碍物。
为具有给定id
的点设置position
。
为给定的id
的点设置weight_scale
。在确定从邻接点到这个点的一段路程的总成本时,weight_scale
要乘以_compute_cost的结果。