AStar2D

Inherits: Reference < Object

使用二维向量作为边缘的AStar类表示。

描述

这是AStar类的包装,该类使用2D向量而不是3D向量。

方法

float

_compute_cost ( int from_id, int to_id ) virtual

float

_estimate_cost ( int from_id, int to_id ) virtual

void

add_point ( int id, Vector2 position, float weight_scale=1.0 )

bool

are_points_connected ( int id, int to_id ) const

void

clear ( )

void

connect_points ( int id, int to_id, bool bidirectional=true )

void

disconnect_points ( int id, int to_id )

int

get_available_point_id ( ) const

int

get_closest_point ( Vector2 to_position, bool include_disabled=false ) const

Vector2

get_closest_position_in_segment ( Vector2 to_position ) const

PoolIntArray

get_id_path ( int from_id, int to_id )

int

get_point_capacity ( ) const

PoolIntArray

get_point_connections ( int id )

int

get_point_count ( ) const

PoolVector2Array

get_point_path ( int from_id, int to_id )

Vector2

get_point_position ( int id ) const

float

get_point_weight_scale ( int id ) const

Array

get_points ( )

bool

has_point ( int id ) const

bool

is_point_disabled ( int id ) const

void

remove_point ( int id )

void

reserve_space ( int num_nodes )

void

set_point_disabled ( int id, bool disabled=true )

void

set_point_position ( int id, Vector2 position )

void

set_point_weight_scale ( int id, float weight_scale )

方法说明

  • float _compute_cost ( int from_id, int to_id ) virtual

计算两个连接点之间的成本时调用。

注意这个函数隐藏在默认的AStar2D类中。


  • float _estimate_cost ( int from_id, int to_id ) virtual

当估计一个点和路径终点之间的成本时调用。

请注意,这个函数隐藏在默认的 AStar2D 类中。


在给定的位置添加一个新的点,并使用给定的标识符。id必须是0或者更大,weight_scale必须是1或者更大。

在确定从相邻点到此点的一段路程的总成本时,weight_scale要乘以_compute_cost的结果。因此,在其他条件相同的情况下,算法优先选择weight_scale较低的点来形成路径。

  1. var astar = AStar2D.new()
  2. astar.add_point(1, Vector2(1, 0), 4) # Adds the point (1, 0) with weight_scale 4 and id 1

如果已经存在一个给定id的点,它的位置和权重将被更新为给定值。


  • bool are_points_connected ( int id, int to_id ) const

返回给定点之间是否有连接/分割。


  • void clear ( )

清除所有点和线段。


  • void connect_points ( int id, int to_id, bool bidirectional=true )

在给定的点之间创建一个分段。如果 bidirectionalfalse,则只允许从 idto_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)


  • void disconnect_points ( int id, int to_id )

删除给定点之间的线段。


  • int get_available_point_id ( ) const

返回没有关联的下一个可用点的ID。


  • int get_closest_point ( Vector2 to_position, bool include_disabled=false ) const

返回离to_position最近的点的ID,可以选择将禁用的点考虑在内。如果点池中没有点,返回-1

注意: 如果几个点都是离to_position最近的点,将返回ID最小的那个点,以保证结果的确定性。


  • Vector2 get_closest_position_in_segment ( Vector2 to_position ) const

返回位于两个连接点之间的线段中离 to_position 最近的位置。

  1. var astar = AStar2D.new()
  2. astar.add_point(1, Vector2(0, 0))
  3. astar.add_point(2, Vector2(0, 5))
  4. astar.connect_points(1, 2)
  5. var res = astar.get_closest_position_in_segment(Vector2(3, 3))# 返回 (0, 3)

结果是在从 y=0y=5 的线段中。它是该段中离给定点最近的位置。


返回一个数组,该数组中包含了由 AStar2D 在给定点之间找到的路径的点的 ID。数组从路径的起点到终点排序。

  1. var astar = AStar2D.new()
  2. astar.add_point(1, Vector2(0, 0))
  3. astar.add_point(2, Vector2(0, 1), 1) # 默认权重为 1
  4. astar.add_point(3, Vector2(1, 1))
  5. astar.add_point(4, Vector2(2, 0))
  6. astar.connect_points(1, 2, false)
  7. astar.connect_points(2, 3, false)
  8. astar.connect_points(4, 3, false)
  9. astar.connect_points(1, 4, false)
  10. 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 配合使用。


返回一个数组,其中包含与给定点形成连接的点的 ID。

  1. var astar = AStar2D.new()
  2. astar.add_point(1, Vector2(0, 0))
  3. astar.add_point(2, Vector2(0, 1))
  4. astar.add_point(3, Vector2(1, 1))
  5. astar.add_point(4, Vector2(2, 0))
  6. astar.connect_points(1, 2, true)
  7. astar.connect_points(1, 3, true)
  8. var neighbors = astar.get_point_connections(1) # 返回 [2, 3]

  • int get_point_count ( ) const

返回当前积分池中的积分数量。


返回一个数组,该数组包含了AStar2D在给定点之间找到的路径中的点。该数组从路径的起点到终点排序。

注意: 这个方法不是线程安全的。如果从一个Thread线程中调用,它将返回一个空的PoolVector2Array,并打印一个错误信息。


返回与给定id相关联的点的位置。


  • float get_point_weight_scale ( int id ) const

返回与给定id关联的点的权重比例。


返回所有点的数组。


返回与给定id相关联的点是否存在。


  • bool is_point_disabled ( int id ) const

返回是否禁用点以进行寻路。默认情况下,所有点均处于启用状态。


  • void remove_point ( int id )

从积分池中删除与给定id关联的积分。


  • void reserve_space ( int num_nodes )

在内部为num_nodes个点保留空间,如果您一次要添加一个已知的大量点(例如对于一个网格),则很有用。新容量必须大于或等于旧容量。


  • void set_point_disabled ( int id, bool disabled=true )

禁用或启用指定点的寻路功能。用于制作临时障碍物。


  • void set_point_position ( int id, Vector2 position )

为具有给定id的点设置position


  • void set_point_weight_scale ( int id, float weight_scale )

为给定的id的点设置weight_scale。在确定从邻接点到这个点的一段路程的总成本时,weight_scale要乘以_compute_cost的结果。