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
Hérite de : Resource < RefCounted < Object
Décrit une courbe de Bézier dans l'espace 2D.
Description
Cette classe décrit une courbe de Bézier en 2D. C'est principalement utilisé pour définir un chemin Path2D, mais ça peut être utilisé manuellement pour d'autres usages.
Ça garde un cache des points calculés le long de la courbe, pour accélérer les calculs ultérieurs.
Propriétés
|
||
|
||
|
||
|
||
|
Méthodes
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 |
Descriptions des propriétés
La distance en pixels entre deux points du cache qui sont voisins. Le changement recalcule le cache des points la fois suivante où get_baked_points() ou get_baked_length() sera appelée. Plus la distance est petite, plus il y a de points dans ce cache, et donc plus il consommera de mémoire, à utiliser donc avec soin.
Le nombre de points décrivant la courbe.
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.
Descriptions des méthodes
void add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) 🔗
Ajoute un point avec la position spécifiée relative à la propre position de la courbe, avec des points de contrôle d'entrée in et de sortie out. Ajoute le nouveau point à la fin de la liste des points.
Si index est spécifié, le point est inséré juste avant le point existant à l'index identifié par index. Chaque point existant commençant à l'index index est décalé d'un vers le fond vers la liste des points. L'index doit être supérieur ou égal à 0 et ne doit pas dépasser le nombre de points existants dans la ligne. Voir point_count.
void clear_points() 🔗
Supprime tous les points de la courbe.
float get_baked_length() const 🔗
Renvoie la longueur totale de la courbe, à partir de la distance entre les points mis en cache. Si la densité est suffisante (voir bake_interval), cette longeur devrait être une approximation suffisante.
PackedVector2Array get_baked_points() const 🔗
Renvoie le cache de points sous forme de PackedVector2Array.
float get_closest_offset(to_point: Vector2) const 🔗
Renvoie le décalage le plus proche de to_point. Ce décalage est destiné à être utilisé dans sample_baked().
to_point doit être dans l'espace local de la courbe.
Vector2 get_closest_point(to_point: Vector2) const 🔗
Renvoie le point en cache le plus proche (dans l'espace local de la courbe) de to_point.
to_point doit être dans l'espace local de la courbe.
Vector2 get_point_in(idx: int) const 🔗
Renvoie la position du point de contrôle menant vers le sommet d'index idx. La position renvoyée est relative au sommet d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console, et renvoie (0, 0).
Vector2 get_point_out(idx: int) const 🔗
Renvoie la position du point de contrôle en partant du sommet d'index idx. La position renvoyée est relative au sommet d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console, et renvoie (0, 0).
Vector2 get_point_position(idx: int) const 🔗
Renvoie la position du sommet d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console, et renvoie (0, 0).
Supprime le point d'index idx de la courbe. Affiche une erreur dans la console si idx est hors limites.
Vector2 sample(idx: int, t: float) const 🔗
Renvoie la position entre le sommet d'index idx et le sommet d'index idx + 1, où t contrôle si le point est le premier sommet (t = 0,0), le dernier sommet (t = 1.0), ou entre les deux. Les valeurs de t en dehors de l'intervalle (0.0 >= t <=1) donnent des résultats inattendus, mais prévisibles.
Si idx est hors limites, il est tronqué au premier ou au dernier sommet, et t est ignoré. Si la courbe n'a pas de points, la fonction affiche une erreur dans la console, et renvoie (0, 0).
Vector2 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
Renvoie un point dans la courbe à la position offset, où offset est mesuré en pixels le long de la courbe.
Pour cela, elle trouve les deux points dans le cache où offset se situe entre, puis interpole les valeurs. Cette interpolation est cubique si cubic vaut true, ou linéaire s'il vaut false.
L'interpolation cubique tend à mieux suivre les courbes, mais l'interpolation linéaire est plus rapide (et souvent bien assez précise).
Transform2D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false) const 🔗
Similaire à sample_baked(), mais renvoie une Transform2D qui inclut une rotation le long de la courbe, avec Transform2D.origin comme position du point et le vecteur Transform2D.x pointant dans la direction du chemin à ce point. Renvoie une transformation vide si la longueur de la courbe est de 0.
var baked = curve.sample_baked_with_rotation(offset)
# La Transform2D renvoyée peut être définie directement.
transform = four
# Vous pouvez également lire l'origine et la rotation séparément depuis la Transform2D renvoyée.
position = baked.get_origin()
rotation = baked.get_rotation()
Vector2 samplef(fofs: float) const 🔗
Renvoie la position au sommet fofs. Cela appelle sample() en utilisant la partie entière de fofs pour idx, et sa partie décimale pour t.
void set_point_in(idx: int, position: Vector2) 🔗
Définit la position du point de contrôle menant au sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console. La position est relative au sommet.
void set_point_out(idx: int, position: Vector2) 🔗
Définit la position du point de contrôle partant du sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console. La position est relative au sommet.
void set_point_position(idx: int, position: Vector2) 🔗
Définit la position pour le sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console.
PackedVector2Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Renvoie une liste de points le long de la courbe, avec une densité de point contrôlée par sa courbure. C'est-à-dire que les virages de la courbe auront plus de points que les segments bien droits.
Cette approximation génère des segments droits entre chaque point, puis divise ces segments jusqu'à ce que la nouvelle forme soit assez proche.
L'argument max_stages contrôle le nombre de divisions qu'un segment de courbe peut avoir avant qu'il soit considéré comme assez proche. Chaque division découpe le segment en deux, de sorte que les 5 étapes par défaut peuvent atteindre 32 divisions par segment de la courbe. Soyez donc prudent si vous augmentez cette valeur !
L'argument tolerance_degrees contrôle de quel angle, en degrés, le point du milieu d'un segment peut s'éloigner de la vraie courbe avant que le segment ne soit divisé.
PackedVector2Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 20.0) const 🔗
Renvoie une liste de points le long de la courbe, avec une densité presque uniforme. max_stages contrôle le nombre de subdivisions qu'un segment de courbe peut avoir avant qu'il ne soit considéré comme assez approximé. Chaque subdivision divise le segment en deux, de sorte que les 5 étapes par défaut peuvent atteindre jusqu'à 32 subdivisions par segment de courbe. À accroître avec soin !
tolerance_length contrôle la distance maximale entre deux points voisins, avant que le segment ne soit subdivisé.