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.
Checking the stable version of the documentation...
Curve2D
Eredita: Resource < RefCounted < Object
Descrive una curva di Bézier nello spazio 2D.
Descrizione
Questa classe descrive una curva di Bézier nello spazio 2D. È usata principalmente per dare una forma a un Path2D, ma può essere campionata manualmente per altri motivi.
Mantiene una cache di punti precalcolati lungo la curva, per velocizzare ulteriori calcoli.
Proprietà
|
||
|
||
|
||
|
||
|
Metodi
void |
add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) |
void |
|
get_baked_length() const |
|
get_baked_points() const |
|
get_closest_offset(to_point: Vector2) const |
|
get_closest_point(to_point: Vector2) const |
|
get_point_in(idx: int) const |
|
get_point_out(idx: int) const |
|
get_point_position(idx: int) const |
|
void |
remove_point(idx: int) |
sample_baked(offset: float = 0.0, cubic: bool = false) const |
|
sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const |
|
void |
set_point_in(idx: int, position: Vector2) |
void |
set_point_out(idx: int, position: Vector2) |
void |
set_point_position(idx: int, position: Vector2) |
tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
|
tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const |
Descrizioni delle proprietà
La distanza in pixel tra due punti adiacenti memorizzati nella cache. Modificandola si forza il ricalcolo della cache la prossima volta che viene chiamata la funzione get_baked_points() o get_baked_length(). Minore è la distanza, più punti ci sono nella cache e più memoria consumerà, quindi cambiala con cautela.
Il numero di punti che descrivono la curva.
Vector2 point_{index}/in = Vector2(0, 0) 🔗
The position of the control point leading to the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
Vector2 point_{index}/out = Vector2(0, 0) 🔗
The position of the control point leading out of the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
Vector2 point_{index}/position = Vector2(0, 0) 🔗
The position of for the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
Descrizioni dei metodi
void add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) 🔗
Aggiunge un punto con la posizione position, relativa alla posizione della curva, con punti di controllo d'ingresso in e d'uscita out. Aggiunge il nuovo punto alla fine della lista dei punti.
Se viene specificato index, il nuovo punto viene inserito prima del punto esistente, identificato dall'indice index. Ogni punto esistente a partire da index viene spostato più in basso nella lista dei punti. L'indice deve essere maggiore o uguale a 0 e non deve superare il numero di punti esistenti nella riga. Vedi point_count.
void clear_points() 🔗
Rimuove tutti i punti dalla curva.
float get_baked_length() const 🔗
Restituisce la lunghezza totale della curva, in base ai punti memorizzati nella cache. Con una densità sufficiente (vedi bake_interval), dovrebbe essere abbastanza approssimativa.
PackedVector2Array get_baked_points() const 🔗
Restituisce la cache dei punti sotto forma di PackedVector2Array.
float get_closest_offset(to_point: Vector2) const 🔗
Restituisce l'offset più vicino a to_point. Questo offset è pensato per essere utilizzato in sample_baked().
to_point deve essere nello spazio locale di questa curva.
Vector2 get_closest_point(to_point: Vector2) const 🔗
Restituisce il punto più vicino sui segmenti precalcolati (nello spazio locale della curva) a to_point.
to_point deve essere nello spazio locale di questa curva.
Vector2 get_point_in(idx: int) const 🔗
Restituisce la posizione del punto di controllo che porta al vertice con l'indice idx. La posizione restituita è relativa al vertice con l'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0).
Vector2 get_point_out(idx: int) const 🔗
Restituisce la posizione del punto di controllo che esce dal vertice con l'indice idx. La posizione restituita è relativa al vertice con l'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0).
Vector2 get_point_position(idx: int) const 🔗
Restituisce la posizione del vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0).
Elimina il punto all'indice idx dalla curva. Invia un errore alla console se idx è fuori dai limiti.
Vector2 sample(idx: int, t: float) const 🔗
Restituisce la posizione tra il vertice idx e il vertice idx + 1, dove t controlla se il punto è il primo vertice (t = 0.0), l'ultimo vertice (t = 1.0) o intermedio. I valori di t al di fuori dell'intervallo (0,0 >= t <=1) danno risultati strani, ma prevedibili.
Se idx è fuori dai limiti, viene troncato al primo o all'ultimo vertice e t viene ignorato. Se la curva non ha punti, la funzione invia un errore alla console e restituisce (0, 0).
Vector2 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
Restituisce un punto all'interno della curva alla posizione offset, dove offset è misurato come distanza in pixel lungo la curva.
Per farlo, trova i due punti memorizzati nella cache tra cui si trova offset, quindi interpola i loro valori. Questa interpolazione è cubica se cubic è impostato su true, o lineare se impostato su false.
L'interpolazione cubica tende a seguire meglio le curve, ma quella lineare è più veloce (e spesso, precisa abbastanza).
Transform2D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const 🔗
Simile a sample_baked(), ma restituisce un Transform2D che include una rotazione lungo la curva, con Transform2D.origin come posizione del punto e il vettore Transform2D.x che punta nella direzione del percorso in quel punto. Restituisce una trasformazione vuota se la lunghezza della curva è 0.
var baked = curve.sample_baked_with_rotation(offset)
# Il Transform2D restituito può essere impostato direttamente.
transform = baked
# È possibile anche leggere l'origine e la rotazione separatamente dal Transform2D restituito.
position = baked.get_origin()
rotation = baked.get_rotation()
Vector2 samplef(fofs: float) const 🔗
Restituisce la posizione sul vertice fofs. Chiama sample() utilizzando la parte intera di fofs come indice (idx) e la sua parte frazionaria come t.
void set_point_in(idx: int, position: Vector2) 🔗
Imposta la posizione del punto di controllo che porta verso il vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console. La posizione è relativa al vertice.
void set_point_out(idx: int, position: Vector2) 🔗
Imposta la posizione del punto di controllo che porta fuori dal vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console. La posizione è relativa al vertice.
void set_point_position(idx: int, position: Vector2) 🔗
Imposta la posizione per il vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console.
PackedVector2Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Restituisce una lista di punti lungo la curva, con una densità di punti controllata dalla curvatura. Ovvero, le parti più curve avranno più punti rispetto alle parti più dritte.
Questa approssimazione crea segmenti dritti tra ogni punto, quindi suddivide tali segmenti finché la forma risultante non è abbastanza simile.
max_stages controlla quante suddivisioni può incontrare un segmento della curva prima di essere considerato abbastanza approssimativo. Ogni suddivisione divide il segmento a metà, quindi le 5 fasi predefinite possono significare fino a 32 suddivisioni per segmento della curva. Aumentare con cautela!
tolerance_degrees controlla di quanti gradi il punto medio di un segmento può deviare dalla curva reale, prima che il segmento debba essere suddiviso.
PackedVector2Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const 🔗
Restituisce una lista di punti lungo la curva, con densità quasi uniforme. max_stages controlla quante suddivisioni può avere un segmento di curva prima di essere considerato abbastanza approssimativo. Ogni suddivisione divide il segmento a metà, quindi le 5 fasi predefiniti possono significare fino a 32 suddivisioni per segmento della curva. Aumentare con cautela!
tolerance_length controlla la distanza massima tra due punti adiacenti, prima che il segmento debba essere suddiviso.