AStar¶
类别: 核心
简要说明¶
使用三维矢量作为边的ASTAR类表示。
方法¶
_compute_cost ( int from_id, int to_id ) virtual |
|
_estimate_cost ( int from_id, int to_id ) virtual |
|
无效 |
add_point ( int id, Vector3 position, float weight_scale=1.0 ) |
are_points_connected ( int id, int to_id ) const |
|
无效 |
clear ( ) |
无效 |
connect_points ( int id, int to_id, bool bidirectional=true ) |
无效 |
disconnect_points ( int id, int to_id ) |
get_available_point_id ( ) const |
|
get_closest_point ( Vector3 to_position ) const |
|
get_closest_position_in_segment ( Vector3 to_position ) const |
|
get_id_path ( int from_id, int to_id ) |
|
get_point_connections ( int id ) |
|
get_point_path ( int from_id, int to_id ) |
|
get_point_position ( int id ) const |
|
get_point_weight_scale ( int id ) const |
|
get_points ( ) |
|
is_point_disabled ( int id ) const |
|
无效 |
remove_point ( int id ) |
无效 |
set_point_disabled ( int id, bool disabled=true ) |
无效 |
set_point_position ( int id, Vector3 position ) |
无效 |
set_point_weight_scale ( int id, float weight_scale ) |
描述¶
A * (星)是一种广泛应用于寻路和图遍历的计算机算法,它是在多个点之间绘制有效定向路径的过程。它因其性能和准确性而得到广泛的应用。Godot是个 * 实现使用向量作为点。
必须手动添加点 add_point 并手动创建段 connect_points . 因此,您可以使用 are_points_connected 函数,获取找到的路径中现有ID的列表 get_id_path 或点列表 get_point_path .
方法说明¶
计算两个连接点之间的成本时调用。
在估计点和路径终点之间的成本时调用。
在给定位置添加具有给定标识符的新点。该算法倾向于使用较低的点 weight_scale
形成一条路径。这个 id
必须大于或等于0,并且 weight_scale
必须大于或等于1。
var astar = AStar.new()
astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with weight_scale 4 and id 1
如果给定的点已经存在 id
,其位置和重量刻度将更新为给定值。
返回给定点之间是否存在连接/段。
void clear ( )
清除所有点和段。
在给定点之间创建段。如果 bidirectional
是 false
,仅从移动 id
到 to_id
是允许的,而不是相反的方向。
var astar = AStar.new()
astar.add_point(1, Vector3(1, 1, 0))
astar.add_point(2, Vector3(0, 5, 0))
astar.connect_points(1, 2, false)
删除给定点之间的段。
int get_available_point_id ( ) const
返回下一个没有关联点的可用点ID。
返回最近点的ID to_position
. 如果点池中没有点,则返回-1。
返回最接近的位置 to_position
位于两个连接点之间的段内的。
var astar = AStar.new()
astar.add_point(1, Vector3(0, 0, 0))
astar.add_point(2, Vector3(0, 5, 0))
astar.connect_points(1, 2)
var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns (0, 3, 0)
结果出现在 y = 0
到 y = 5
. 它是段中最接近给定点的位置。
PoolIntArray get_id_path ( int from_id, int to_id )
返回一个数组,其中包含构成给定点之间的ASTAR找到的路径的点的ID。数组是从路径的起点到终点排序的。
var astar = AStar.new()
astar.add_point(1, Vector3(0, 0, 0))
astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1
astar.add_point(3, Vector3(1, 1, 0))
astar.add_point(4, Vector3(2, 0, 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) # Returns [1, 2, 3]
如果将第二个点的权重更改为3,则结果将为 [1, 4, 3]
相反,因为现在即使距离更长,通过第4点也比通过第2点更容易。
PoolIntArray get_point_connections ( int id )
返回一个数组,其中包含构成与给定点连接的点的ID。
var astar = AStar.new()
astar.add_point(1, Vector3(0, 0, 0))
astar.add_point(2, Vector3(0, 1, 0))
astar.add_point(3, Vector3(1, 1, 0))
astar.add_point(4, Vector3(2, 0, 0))
astar.connect_points(1, 2, true)
astar.connect_points(1, 3, true)
var neighbors = astar.get_point_connections(1) # Returns [2, 3]
PoolVector3Array get_point_path ( int from_id, int to_id )
返回一个数组,其中的点位于由astar在给定点之间找到的路径中。数组是从路径的起点到终点排序的。
返回与给定的 id
.
返回与给定的 id
.
Array get_points ( )
返回所有点的数组。
返回是否与给定的 id
存在。
返回是否为路径查找禁用点。默认情况下,启用所有点。
void remove_point ( int id )
删除与给定的 id
从积分池。
禁用或启用指定的路径查找点。用于制造临时障碍物。
设置 position
对于给定的点 id
.
设置 weight_scale
对于给定的点 id
.