Могу ли я заставить встроенный AStar
выбрать кратчайший путь с наименьшим изменением направления ?
В настоящее время я строю свой график следующим образом:
extends GridMap
var _astar = AStar.new()
func _ready():
var id = 0
for c in get_used_cells():
var weight = 1.0
if _get_cover(c.x, c.y, c.z):
weight = 9999.0 # impassable tile
_astar.add_point(id, Vector3(c.x, c.y, c.z), weight)
id += 1
for c in get_used_cells():
var center = _astar.get_closest_point(Vector3(c.x, c.y, c.z))
var above = _astar.get_closest_point(Vector3(c.x, c.y, c.z + 1))
var right = _astar.get_closest_point(Vector3(c.x + 1, c.y, c.z))
assert(id > 0)
if above >= 0:
_astar.connect_points(center, above, true)
if right >= 0:
_astar.connect_points(center, right, true)
Кажется, что вы можете взвешивать только точки, а не ребра, поэтому я не уверен, как предпочесть одно направление другому.Кажется, что выбранный путь всегда максимизирует изменение направления:
![jagged path](https://i.stack.imgur.com/e5VGk.png)