Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

AStarGrid2D

Eredita: RefCounted < Object

Un'implementazione di A* per trovare il percorso più breve tra due punti su una griglia parziale 2D.

Descrizione

AStarGrid2D è una variante di AStar2D che è specializzata per le griglie 2D parziali. È più semplice da usare perché non richiede di creare manualmente i punti e collegarli insieme. Questa classe supporta anche più tipi di euristica, modalità per movimento diagonale, e una modalità di salto per velocizzare i calcoli.

Per utilizzare AStarGrid2D, è sufficiente solo impostare la regione (region) della griglia, impostando facoltativamente le dimensioni della cella (cell_size), e infine chiamare il metodo update():

var astar_grid = AStarGrid2D.new()
astar_grid.region = Rect2i(0, 0, 32, 32)
astar_grid.cell_size = Vector2(16, 16)
astar_grid.update()
print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # Stampa [(0, 0), (1, 1), (2, 2), (3, 3), (3, 4)]
print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # Stampa [(0, 0), (16, 16), (32, 32), (48, 48), (48, 64)]

Per rimuovere un punto dalla griglia di rilevamento del percorso, deve essere impostato come "solido" con set_point_solid().

Tutorial

Proprietà

CellShape

cell_shape

0

Vector2

cell_size

Vector2(1, 1)

Heuristic

default_compute_heuristic

0

Heuristic

default_estimate_heuristic

0

DiagonalMode

diagonal_mode

0

bool

jumping_enabled

false

Vector2

offset

Vector2(0, 0)

Rect2i

region

Rect2i(0, 0, 0, 0)

Vector2i

size

Vector2i(0, 0)

Metodi

float

_compute_cost(from_id: Vector2i, to_id: Vector2i) virtual const

float

_estimate_cost(from_id: Vector2i, end_id: Vector2i) virtual const

void

clear()

void

fill_solid_region(region: Rect2i, solid: bool = true)

void

fill_weight_scale_region(region: Rect2i, weight_scale: float)

Array[Vector2i]

get_id_path(from_id: Vector2i, to_id: Vector2i, allow_partial_path: bool = false)

Array[Dictionary]

get_point_data_in_region(region: Rect2i) const

PackedVector2Array

get_point_path(from_id: Vector2i, to_id: Vector2i, allow_partial_path: bool = false)

Vector2

get_point_position(id: Vector2i) const

float

get_point_weight_scale(id: Vector2i) const

bool

is_dirty() const

bool

is_in_bounds(x: int, y: int) const

bool

is_in_boundsv(id: Vector2i) const

bool

is_point_solid(id: Vector2i) const

void

set_point_solid(id: Vector2i, solid: bool = true)

void

set_point_weight_scale(id: Vector2i, weight_scale: float)

void

update()


Enumerazioni

enum Heuristic: 🔗

Heuristic HEURISTIC_EUCLIDEAN = 0

L'euristico euclideo da utilizzare per la ricerca del percorso, utilizzando la seguente formula:

dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
risultato = sqrt(dx * dx + dy * dy)

Nota: Questo è anche l'euristico interno utilizzato in AStar3D e AStar2D per impostazione predefinita (con l'inclusione di possibile coordinate sull'asse z).

Heuristic HEURISTIC_MANHATTAN = 1

L'euristico di Manhattan da utilizzare per la ricerca del percorso, utilizzando la seguente formula:

dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
risultato = dx + dy

Nota: Questo euristico è destinato a essere utilizzato con movimenti ortogonali a 4 lati, forniti impostando diagonal_mode a DIAGONAL_MODE_NEVER.

Heuristic HEURISTIC_OCTILE = 2

L'euristico ottale da utilizzare per la ricerca del percorso utilizzando la seguente formula:

dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
f = sqrt(2) - 1
risultato = (dx < dy) ? f * dx + dy : f * dy + dx;

Heuristic HEURISTIC_CHEBYSHEV = 3

L'euristico di Čebyšëv da utilizzare per la ricerca del percorso utilizzando la seguente formula:

dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
risultato = max(dx, dy)

Heuristic HEURISTIC_MAX = 4

Rappresenta la dimensione dell'enumerazione Heuristic.


enum DiagonalMode: 🔗

DiagonalMode DIAGONAL_MODE_ALWAYS = 0

L'algoritmo di ricerca del percorso ignorerà i vicini solidi intorno alla cella di destinazione e permetterà di passare tramite le diagonali.

DiagonalMode DIAGONAL_MODE_NEVER = 1

L'algoritmo di ricerca del percorso ignorerà tutte le diagonali e la strada sarà sempre ortogonale.

DiagonalMode DIAGONAL_MODE_AT_LEAST_ONE_WALKABLE = 2

L'algoritmo di ricerca del percorso eviterà di usare le diagonali se almeno due ostacoli sono stati posti intorno alle celle vicine del segmento specifico del percorso.

DiagonalMode DIAGONAL_MODE_ONLY_IF_NO_OBSTACLES = 3

L'algoritmo di ricerca del percorso eviterà di usare le diagonali se qualsiasi ostacolo è stato posto intorno alle celle vicine del segmento specifico del percorso.

DiagonalMode DIAGONAL_MODE_MAX = 4

Rappresenta la dimensione dell'enumerazione DiagonalMode.


enum CellShape: 🔗

CellShape CELL_SHAPE_SQUARE = 0

Forma di cella rettangolare.

CellShape CELL_SHAPE_ISOMETRIC_RIGHT = 1

Forma di cella a diamante (per un aspetto isometrico). La disposizione delle coordinate delle celle in cui l'asse orizzontale va verso l'alto e a destra, e quello verticale va verso il basso e a destra.

CellShape CELL_SHAPE_ISOMETRIC_DOWN = 2

Forma di cella a diamante (per un aspetto isometrico). La disposizione delle coordinate delle celle in cui l'asse orizzontale va verso il basso e a destra, e quello verticale va verso l'alto e a destra.

CellShape CELL_SHAPE_MAX = 3

Rappresenta la dimensione dell'enumerazione CellShape.


Descrizioni delle proprietà

CellShape cell_shape = 0 🔗

La forma delle celle. Influenza come le posizioni sono collocate nella griglia. Se cambiata, bisogna chiamare update() prima di trovare il prossimo percorso.


Vector2 cell_size = Vector2(1, 1) 🔗

Le dimensioni delle celle dei punti che verranno applicate per calcolare la posizione del punto risultante restituita da get_point_path(). Se cambiata, bisogna chiamare update() prima di trovare il prossimo percorso.


Heuristic default_compute_heuristic = 0 🔗

  • void set_default_compute_heuristic(value: Heuristic)

  • Heuristic get_default_compute_heuristic()

L'euristica (Heuristic) predefinita che verrà utilizzata per calcolare il costo tra due punti se _compute_cost() non è stato sovrascritto.


Heuristic default_estimate_heuristic = 0 🔗

  • void set_default_estimate_heuristic(value: Heuristic)

  • Heuristic get_default_estimate_heuristic()

L'euristica (Heuristic) predefinita che verrà utilizzata per calcolare il costo tra il punto e il punto finale se _estimate_cost() non è stato sovrascritto.


DiagonalMode diagonal_mode = 0 🔗

Una specifica modalità di diagonale (DiagonalMode) che costringe il percorso a evitare o accettare le diagonali specificate.


bool jumping_enabled = false 🔗

  • void set_jumping_enabled(value: bool)

  • bool is_jumping_enabled()

Abilita o disabilita il salto per saltare i punti intermedi e velocizzare l'algoritmo di ricerca.

Nota: Attualmente, abilitare questa opzione disabilita la considerazione della scala del peso nella ricerca del percorso.


Vector2 offset = Vector2(0, 0) 🔗

Lo scostamento della griglia che verrà applicato per calcolare la posizione del punto risultante restituita da get_point_path(). Se cambiato, bisogna chiamare update() prima di trovare il prossimo percorso.


Rect2i region = Rect2i(0, 0, 0, 0) 🔗

La regione delle celle della griglia disponibile per la ricerca del percorso. Se cambiato, bisogna chiamare update() prima di trovare il prossimo percorso.


Vector2i size = Vector2i(0, 0) 🔗

Deprecato: Use region instead.

Le dimensioni della griglia (numero di celle di dimensione cell_size su ogni asse). Se cambiate, bisogna chiamare update() prima di trovare il prossimo percorso.


Descrizioni dei metodi

float _compute_cost(from_id: Vector2i, to_id: Vector2i) virtual const 🔗

Chiamato quando si calcola il costo tra due punti collegati.

Si noti che questa funzione è nascosta nella classe predefinita AStarGrid2D.


float _estimate_cost(from_id: Vector2i, end_id: Vector2i) virtual const 🔗

Chiamato quando si stima il costo tra un punto e il punto finale del percorso.

Si noti che questa funzione è nascosta nella classe predefinita AStarGrid2D.


void clear() 🔗

Cancella la griglia e imposta region a Rect2i(0, 0, 0, 0).


void fill_solid_region(region: Rect2i, solid: bool = true) 🔗

Riempi la determinata regione region sulla griglia con il valore specificato per il flag solido.

Nota: Chiamare update() non è necessario dopo aver chiamato questa funzione.


void fill_weight_scale_region(region: Rect2i, weight_scale: float) 🔗

Riempie la determinata regione region sulla griglia con il valore specificato per la scala di peso.

Nota: Chiamare update() non è necessario dopo aver chiamato questa funzione.


Array[Vector2i] get_id_path(from_id: Vector2i, to_id: Vector2i, allow_partial_path: bool = false) 🔗

Restituisce un array con i punti che formano il percorso trovato da AStar2D tra i punti indicati. L'array è ordinato dal punto iniziale al punto finale del percorso.

Se il punto from_id è disabilitato, restituisce un array vuoto (anche se from_id == to_id).

Se il punto from_id non è disabilitato, non esiste un percorso valido verso la destinazione e allow_partial_path è true, restituisce un percorso verso il punto più vicino alla destinazione che può essere raggiunto.

Nota: quando allow_partial_path è true e to_id è solido, la ricerca potrebbe richiedere un tempo insolitamente lungo per essere completata.


Array[Dictionary] get_point_data_in_region(region: Rect2i) const 🔗

Restituisce un array di dizionari con i dati dei punti (id: Vector2i, position: Vector2, solid: bool, weight_scale: float) all'interno della regione region.


PackedVector2Array get_point_path(from_id: Vector2i, to_id: Vector2i, allow_partial_path: bool = false) 🔗

Restituisce un array con i punti che sono presenti nel percorso trovato da AStarGrid2D tra i punti indicati. L'array è ordinato dal punto iniziale al punto finale del percorso.

Se il punto from_id è disabilitato, restituisce un array vuoto (anche se from_id == to_id).

Se il punto from_id non è disabilitato, non esiste un percorso valido verso la destinazione e allow_partial_path è true, restituisce un percorso verso il punto più vicino alla destinazione che può essere raggiunto.

Nota: Questo metodo non è thread-safe; si può usare solo da un singolo Thread alla volta. Si consiglia di utilizzare Mutex per garantire l'accesso esclusivo a un thread ed evitare accessi concorrenti.

Inoltre, quando allow_partial_path è true e to_id è solido, la ricerca potrebbe richiedere un tempo insolitamente lungo per essere completata.


Vector2 get_point_position(id: Vector2i) const 🔗

Restituisce la posizione del punto associato all'id fornito.


float get_point_weight_scale(id: Vector2i) const 🔗

Restituisce la scala di peso del punto associato all'id fornito.


bool is_dirty() const 🔗

Indica che i parametri della griglia sono stati modificati ed è necessario chiamare update().


bool is_in_bounds(x: int, y: int) const 🔗

Restituisce true se il x e y è una valida coordinate di griglia (id), cioè se è all'interno di region. Equivalente a region.has_point(Vector2i(x, y)).


bool is_in_boundsv(id: Vector2i) const 🔗

Restituisce true se il vettore id è una valida coordinata di griglia, cioè se è all'interno di region. Equivalente a region.has_point(id).


bool is_point_solid(id: Vector2i) const 🔗

Restituisce true se un punto è disabilitato per il rilevamento del percorso. Per impostazione predefinita, tutti i punti sono abilitati.


void set_point_solid(id: Vector2i, solid: bool = true) 🔗

Disabilita o abilita il punto specificato per il rilevamento del percorso. Utile per creare un ostacolo. Per impostazione predefinita, tutti i punti sono abilitati.

Nota: Non è necessario chiamare update() dopo aver chiamato questa funzione.


void set_point_weight_scale(id: Vector2i, weight_scale: float) 🔗

Imposta la scala del peso (weight_scale) per il punto con l'id fornito. weight_scale viene moltiplicato per il risultato di _compute_cost() quando si determina il costo complessivo del viaggio attraverso un segmento da un punto vicino a questo punto.

Nota: Non è necessario chiamare update() dopo aver chiamato questa funzione.


void update() 🔗

Aggiorna lo stato interno della griglia in base ai parametri per prepararla alla ricerca del percorso. Deve essere chiamato se vengono modificati parametri come region, cell_size o offset. is_dirty() restituirà true se questo è il caso e deve essere chiamato.

Nota: Tutti i dati dei punti (solidità e scala del peso) verranno cancellati.