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

Успадковує: Resource < RefCounted < Object

Опишіть криву Bézier на 2D площі.

Опис

Цей клас описує криву Bézier на 2D площі. В основному використовується для додавання форми до Path2D, але може бути вручну зразка для інших цілей.

Забезпечує кеш заготовлених точок по криві, щоб прискорити подальші розрахунки.

Властивості

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)

Методи

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


Описи властивостей

float bake_interval = 5.0 🔗

  • void set_bake_interval(value: float)

  • float get_bake_interval()

Відстань між двома суміжними пунктами кешування. Зміна кешу, щоб бути переведеним в наступний раз, функція get_baked_points(). Чим менша відстань, тим більше точок в кеші і чим більше пам'яті буде споживати, тому використовуйте з обережністю.


int point_count = 0 🔗

  • void set_point_count(value: int)

  • int get_point_count()

Кількість точок, що описують криву.


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.


Описи методів

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

Додає точку з вказаною position відносно власної позиції кривої, з контрольними точками в in і out. Додає нову точку в кінці списку точок.

Якщо вказано index, нова точка вставляється перед уже наявною, визначеною index. Кожна наявна точка, починаючи з index, передається далі в список точок. Індекс повинен бути більшим чи рівним 0 і не повинен перевищувати кількість наявних точок в рядку. Дивитись point_count.


void clear_points() 🔗

Видаліть всі точки з кривої.


float get_baked_length() const 🔗

Повертає загальну довжину кривої на основі кешованих точок. За умови достатньої щільності (див. bake_interval) вона має бути достатньо приблизною.


PackedVector2Array get_baked_points() const 🔗

Повертає кеш точок як PackedVector2Array.


float get_closest_offset(to_point: Vector2) const 🔗

Повертає найближче зміщення до to_point. Це зміщення призначене для використання в sample_baked().

to_point має бути в локальному просторі цієї кривої.


Vector2 get_closest_point(to_point: Vector2) const 🔗

Повертає найближчу точку на запечених сегментах (у локальному просторі кривої) до to_point.

to_point має бути в локальному просторі цієї кривої.


Vector2 get_point_in(idx: int) const 🔗

Повертає позицію контрольної точки, що веде до вершини idx. Повернуте положення відносно вершини idx. Якщо індекс вимкнено з меж, функція надсилає помилку до консолі, і повертає (0, 0).


Vector2 get_point_out(idx: int) const 🔗

Повертає позицію контрольної точки, що ведеться з вершини idx. Повернуте положення відносно вершини idx. Якщо індекс вимкнено з меж, функція надсилає помилку до консолі, і повертає (0, 0).


Vector2 get_point_position(idx: int) const 🔗

Повертає позицію вершини idx. Якщо індекс вимкнено з меж, функція надсилає помилку до консолі, і повертає (0, 0).


void remove_point(idx: int) 🔗

Видаляє точку idx з кривої. Виводить помилку в консоль, якщо idx виходить за межі.


Vector2 sample(idx: int, t: float) const 🔗

Повертає позицію між вершиною idx і вершиною idx + 1, де t контролює, якщо точка є першою вершиною (t = 0.0), останнього вершини (t = 1.0), або між. Значення t за межі (0.0 <= т <= 1.0) дають дивний, але передбачуваний результат.

Якщо idx є з меж, він truncated to the first or last vertex, і t ігнорується. Якщо крива не має точок, функція надсилає помилку в консолі, і повертає (0, 0).


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

Повертає точку в межах кривої на позиції offset, де offset вимірюється як піксельна відстань вздовж кривої.

З цією метою шукаються дві кешовані точки, між якими знаходиться offset, а потім відбувається інтерполяція значень. Ця інтерполяція є кубічною, якщо cubic встановлено на true, або лінійною, якщо встановлено на false.

Кубічна інтерполяція має бути краще слідувати вигинам, але лінійна швидше (і часто досить точна).


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

Подібний до sample_baked(), але повертає Transform2D, що включає обертання вздовж кривої, з Transform2D.origin як позицією точки і вектором Transform2D.x, що вказує на напрямок шляху в цій точці. Повертає порожнє перетворення, якщо довжина кривої дорівнює 0.

var baked = curve.sample_baked_with_rotation(offset)
# Повернуте Transform2D можна задати безпосередньо.
transform = baked
# Ви також можете прочитати початок координат і поворот окремо від повернутого Transform2D.
position = baked.get_origin()
rotation = baked.get_rotation()

Vector2 samplef(fofs: float) const 🔗

Повертає позицію у вершині fofs. Викликає метод sample(), використовуючи цілу частину fofs як idx, а його дробову частину як t.


void set_point_in(idx: int, position: Vector2) 🔗

Налаштовує позицію контрольної точки, що веде до вершини idx. Якщо індекс виходить з меж, функція відправляє помилку в консолі. Позиція відносно вершини.


void set_point_out(idx: int, position: Vector2) 🔗

Налаштовує позицію контрольної точки, що ведеться з вершини idx. Якщо індекс виходить з меж, функція відправляє помилку в консолі. Позиція відносно вершини.


void set_point_position(idx: int, position: Vector2) 🔗

Встановлює позицію для вершини idx. Якщо індекс виходить з меж, функція відправляє помилку в консолі.


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

Повертає список точок вздовж вигину, з нахилом контрольованої щільності точки. Що це, деталі кривих будуть мати більше точок, ніж прямі частини.

Ця апроксимація робить прямі сегменти між кожною точкою, потім позбавляє від цих сегментів до тих пір, поки отримана форма аналогічна.

max_stages контролює, як багато підрозділів кривого сегмента може зіткнутися до того, як він вважається досить наближеним. Кожен підрозділ розбиває сегмент навпіл, тому етапи за замовчуванням 5 може означати до 32 підрозділів на кривому сегменті. Підвищений догляд!

толерантність_degrees контролює, скільки ступенів середньої точки сегмента може відхилити від реальної кривої, до того, як сегмент повинен бути відхилений.


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

Повертає список точок вздовж вигину, з майже рівномірною щільністю. max_stages контролює, як багато підрозділів кривого сегмента може зіткнутися до того, як він вважається досить наближеним. Кожен підрозділ розбиває сегмент навпіл, тому етапи за замовчуванням 5 може означати до 32 підрозділів на кривому сегменті. Підвищений догляд!

толерантність_довжина контролює максимальну відстань між двома сусідніми точками, перш ніж сегмент повинен бути підпорядкований.