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
Успадковує: Resource < RefCounted < Object
Опишіть криву Bézier на 2D площі.
Опис
Цей клас описує криву Bézier на 2D площі. В основному використовується для додавання форми до Path2D, але може бути вручну зразка для інших цілей.
Забезпечує кеш заготовлених точок по криві, щоб прискорити подальші розрахунки.
Властивості
|
||
|
||
Vector2 |
|
|
Vector2 |
|
|
Vector2 |
|
Методи
void |
add_point(position: Vector2, in: Vector2 = Vector2(0, 0), out: Vector2 = Vector2(0, 0), index: int = -1) |
void |
|
get_baked_length() const |
|
PackedVector2Array |
get_baked_points() const |
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 |
|
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 |
|
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 |
Описи властивостей
Відстань між двома суміжними пунктами кешування. Зміна кешу, щоб бути переведеним в наступний раз, функція get_baked_points(). Чим менша відстань, тим більше точок в кеші і чим більше пам'яті буде споживати, тому використовуйте з обережністю.
Кількість точок, що описують криву.
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).
Видаляє точку 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 підрозділів на кривому сегменті. Підвищений догляд!
толерантність_довжина контролює максимальну відстань між двома сусідніми точками, перш ніж сегмент повинен бути підпорядкований.