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.

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à

float

bake_interval

5.0

int

point_count

0

Vector2

point_{index}/in

Vector2(0, 0)

Vector2

point_{index}/out

Vector2(0, 0)

Vector2

point_{index}/position

Vector2(0, 0)

Metodi

void

add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1)

void

clear_points()

float

get_baked_length() const

PackedVector2Array

get_baked_points() const

float

get_closest_offset(to_point: Vector2) const

Vector2

get_closest_point(to_point: Vector2) const

Vector2

get_point_in(idx: int) const

Vector2

get_point_out(idx: int) const

Vector2

get_point_position(idx: int) const

void

remove_point(idx: int)

Vector2

sample(idx: int, t: float) const

Vector2

sample_baked(offset: float = 0.0, cubic: bool = false) const

Transform2D

sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const

Vector2

samplef(fofs: float) 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)

PackedVector2Array

tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const

PackedVector2Array

tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const


Descrizioni delle proprietà

float bake_interval = 5.0 🔗

  • void set_bake_interval(value: float)

  • float get_bake_interval()

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.


int point_count = 0 🔗

  • void set_point_count(value: int)

  • int get_point_count()

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).


void remove_point(idx: int) 🔗

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.