TileMapLayer

Успадковує: Node2D < CanvasItem < Node < Object

Node для 2D кахельних карт.

Опис

Вузол для 2D-карт на основі плиток. TileMapLayer використовує TileSet, який містить список плиток, що використовуються для створення карт на основі сітки. На відміну від вузла TileMap, який є застарілим, TileMapLayer має лише один шар плиток. Ви можете використовувати кілька TileMapLayer для досягнення того ж результату, що й вузол TileMap.

З міркувань продуктивності всі оновлення TileMap пакетно об'єднуються в кінці кадру. Зокрема, це означає, що плитки сцени з TileSetScenesCollectionSource ініціалізуються після їх батьківського елемента. Це ставиться в чергу лише всередині дерева сцен.

Щоб примусово виконати оновлення раніше, викличте update_internals().

Примітка: З міркувань продуктивності та сумісності координати, серіалізовані TileMapLayer, обмежені 16-бітними знаковими цілими числами, тобто діапазон координат X та Y становить від -32768 до 32767. Під час збереження даних тайлів тайли поза цим діапазоном переносяться.

Посібники

Властивості

bool

collision_enabled

true

DebugVisibilityMode

collision_visibility_mode

0

bool

enabled

true

bool

navigation_enabled

true

DebugVisibilityMode

navigation_visibility_mode

0

bool

occlusion_enabled

true

int

physics_quadrant_size

16

int

rendering_quadrant_size

16

PackedByteArray

tile_map_data

PackedByteArray()

TileSet

tile_set

bool

use_kinematic_bodies

false

bool

x_draw_order_reversed

false

int

y_sort_origin

0

Методи

void

_tile_data_runtime_update(coords: Vector2i, tile_data: TileData) virtual

void

_update_cells(coords: Array[Vector2i], forced_cleanup: bool) virtual

bool

_use_tile_data_runtime_update(coords: Vector2i) virtual

void

clear()

void

erase_cell(coords: Vector2i)

void

fix_invalid_tiles()

int

get_cell_alternative_tile(coords: Vector2i) const

Vector2i

get_cell_atlas_coords(coords: Vector2i) const

int

get_cell_source_id(coords: Vector2i) const

TileData

get_cell_tile_data(coords: Vector2i) const

Vector2i

get_coords_for_body_rid(body: RID) const

RID

get_navigation_map() const

Vector2i

get_neighbor_cell(coords: Vector2i, neighbor: CellNeighbor) const

TileMapPattern

get_pattern(coords_array: Array[Vector2i])

Array[Vector2i]

get_surrounding_cells(coords: Vector2i)

Array[Vector2i]

get_used_cells() const

Array[Vector2i]

get_used_cells_by_id(source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = -1) const

Rect2i

get_used_rect() const

bool

has_body_rid(body: RID) const

bool

is_cell_flipped_h(coords: Vector2i) const

bool

is_cell_flipped_v(coords: Vector2i) const

bool

is_cell_transposed(coords: Vector2i) const

Vector2i

local_to_map(local_position: Vector2) const

Vector2i

map_pattern(position_in_tilemap: Vector2i, coords_in_pattern: Vector2i, pattern: TileMapPattern)

Vector2

map_to_local(map_position: Vector2i) const

void

notify_runtime_tile_data_update()

void

set_cell(coords: Vector2i, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = 0)

void

set_cells_terrain_connect(cells: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true)

void

set_cells_terrain_path(path: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true)

void

set_navigation_map(map: RID)

void

set_pattern(position: Vector2i, pattern: TileMapPattern)

void

update_internals()


Сигнали

changed() 🔗

Випробувано, коли це зміни властивостей TileMapLayer. Це включає в себе модифіковані клітини, властивості, або зміни, внесені до його призначення TileSet.

Примітка: Цей сигнал може бути вказаний дуже часто, коли пакетне моделювання TileMapLayer. Уникайте виконання комплексної обробки в підключеній функції і розглянемо затримку його до кінця кадру замість (тобто виклику Object.call_deferred()).


Переліки

enum DebugVisibilityMode: 🔗

DebugVisibilityMode DEBUG_VISIBILITY_MODE_DEFAULT = 0

Приховайте колізії або форми налагодження навігації в редакторі та використовуйте налаштування налагодження, щоб визначити їх видимість у грі (наприклад, SceneTree.debug_collisions_hint або SceneTree.debug_navigation_hint).

DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_HIDE = 2

Завжди приховує зіткнення або навігаційні форми.

DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_SHOW = 1

Завжди показати зіткнення або навігаційні форми.


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

bool collision_enabled = true 🔗

  • void set_collision_enabled(value: bool)

  • bool is_collision_enabled()

Увімкнути або вимкнути зіткнення.


DebugVisibilityMode collision_visibility_mode = 0 🔗

Показати або сховати форму зіткнення TileMapLayer. Якщо встановити до DEBUG_VISIBILITY_MODE_DEFAULT, це залежить від параметрів зіткненого з'єднання.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Якщо false, вимкнено це TileMapLayer повністю (робота, зіткнення, навігація, сцена плитки тощо)


bool navigation_enabled = true 🔗

  • void set_navigation_enabled(value: bool)

  • bool is_navigation_enabled()

Якщо увімкнено true, навігаційні області.


DebugVisibilityMode navigation_visibility_mode = 0 🔗

Показати або приховати навігаційні сітки TileMapLayer. Якщо встановити на DEBUG_VISIBILITY_MODE_DEFAULT, це залежить від параметрів навігаційної дебюги.


bool occlusion_enabled = true 🔗

  • void set_occlusion_enabled(value: bool)

  • bool is_occlusion_enabled()

Увімкнути або вимкнути блокування світла.


int physics_quadrant_size = 16 🔗

  • void set_physics_quadrant_size(value: int)

  • int get_physics_quadrant_size()

Розмір фізичного квадранта TileMapLayer. У фізичному квадранті клітинки з подібними фізичними властивостями групуються разом, а їхні форми зіткнень об'єднуються. physics_quadrant_size визначає довжину сторони квадрата в системі координат карти, яка утворює квадрант. Таким чином, розмір квадранта за замовчуванням групує разом 16 * 16 = 256 плиток.

Примітка: Оскільки квадранти створюються відповідно до системи координат карти, «квадратна форма» квадранта може не виглядати як квадрат у локальній системі координат TileMapLayer.

Примітка: Це впливає на значення, що повертається методом get_coords_for_body_rid().


int rendering_quadrant_size = 16 🔗

  • void set_rendering_quadrant_size(value: int)

  • int get_rendering_quadrant_size()

Розмір квадранта візуалізації TileMapLayer. Квадрант – це група плиток, які потрібно намалювати разом на одному елементі полотна для цілей оптимізації. rendering_quadrant_size визначає довжину сторони квадрата в системі координат карти, що утворює квадрант. Таким чином, розмір квадранта за замовчуванням групує плитки 16 * 16 = 256

Розмір квадранта не застосовується до TileMapLayer з сортуванням по осі Y, оскільки в цьому випадку плитки групуються за позицією Y.

Примітка: Оскільки квадранти створюються відповідно до системи координат карти, «квадратна форма» квадранта може не виглядати як квадрат у локальній системі координат TileMapLayer.


PackedByteArray tile_map_data = PackedByteArray() 🔗

Сирі дані черепиці як байтовий масив.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedByteArray for more details.


TileSet tile_set 🔗

TileSet використовується цим шаром. Тут зберігаються текстури, зіткнення та додаткова поведінка всіх доступних плиток.


bool use_kinematic_bodies = false 🔗

  • void set_use_kinematic_bodies(value: bool)

  • bool is_using_kinematic_bodies()

Якщо true, це TileMapLayer форми зіткнення будуть миттєві як kinematic тіл. Це може знадобитися для переміщення TileMapLayer вузлів (тобто рухомих платформ).


bool x_draw_order_reversed = false 🔗

  • void set_x_draw_order_reversed(value: bool)

  • bool is_x_draw_order_reversed()

Якщо CanvasItem.y_sort_enabled увімкнено, встановлення значення true змінить порядок малювання плиток на осі X.


int y_sort_origin = 0 🔗

  • void set_y_sort_origin(value: int)

  • int get_y_sort_origin()

Це значення Y-sort походження до кожної плитки Y-sort значення походження. Це дозволяє, наприклад, підробити різний рівень висоти. Це може бути корисним для ігор з видом на вершину.


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

void _tile_data_runtime_update(coords: Vector2i, tile_data: TileData) virtual 🔗

Викликається з об'єктом TileData, який буде використано внутрішньо TileMapLayer, що дозволяє його модифікацію під час виконання.

Цей метод викликається лише тоді, коли реалізовано метод use_tile_data_runtime_update(), і повертає true для заданого тайла coords.

Попередження: Підресурси об'єкта tile_data такі ж, як і в TileSet. Їх модифікація може вплинути на весь TileSet. Натомість переконайтеся, що ці ресурси продубльовані.

Примітка: Якщо властивості об'єкта tile_data змінюються з часом, використовуйте метод notify_runtime_tile_data_update(), щоб повідомити TileMapLayer про необхідність оновлення.


void _update_cells(coords: Array[Vector2i], forced_cleanup: bool) virtual 🔗

Викликається, коли клітинки TileMapLayer потребують внутрішнього оновлення. Це оновлення може бути викликано зміною окремих клітинок або зміною в tile_set (у результаті чого всі клітинки ставляться в чергу для оновлення). Перший виклик цієї функції завжди призначений для ініціалізації всіх клітинок TileMapLayer. coords містить координати всіх змінених клітинок, приблизно в тому порядку, в якому вони були змінені. forced_cleanup має значення true, коли внутрішні елементи TileMapLayer мають бути повністю очищені. Це той випадок, коли:

  • Шар відключено;

  • Шар не видно;

  • tile_set має значення null;

  • Вузол видаляється з дерева;

  • Вузол звільнено.

Зауважте, що будь-яке внутрішнє оновлення, яке відбувається під час перевірки однієї з цих умов, вважається «очищенням». Дивіться також update_internals().

Попередження: Реалізація цього методу може погіршити продуктивність TileMapLayer.


bool _use_tile_data_runtime_update(coords: Vector2i) virtual 🔗

Поверніть true, якщо плитка на координатах coords вимагає оновлення робочого часу.

Налаштування: Переконайтеся, що ця функція тільки повертає true при необхідності. Будь-яка кахельна плитка, оброблена в режимі runtime без потреби в ній, буде на увазі значне виконання штрафу.

Примітка: Якщо результат цієї функції слід змінити, скористайтеся notify_runtime_tile_data_update() для позначення TileMapLayer він потребує оновлення.


void clear() 🔗

Очищає всі клітини.


void erase_cell(coords: Vector2i) 🔗

Використовуємо клітинку в координатах coords.


void fix_invalid_tiles() 🔗

Очистити клітинки, що містять плитку, яка не існує в tile_set.


int get_cell_alternative_tile(coords: Vector2i) const 🔗

Повертає альтернативний ідентифікатор плитки в координатах coords.


Vector2i get_cell_atlas_coords(coords: Vector2i) const 🔗

Повертаємо кахельну плитку координатами ID комірки на координатах coords. Повертає Vector2i(-1, -1), якщо клітинка не існує.


int get_cell_source_id(coords: Vector2i) const 🔗

Повертає ідентифікатор кахельного джерела в координатах coords. Повертає -1, якщо клітина не існує.


TileData get_cell_tile_data(coords: Vector2i) const 🔗

Повертає об'єкт TileData, пов'язаний із заданою коміркою, або null, якщо комірка не існує або не є TileSetAtlasSource.

func get_clicked_tile_power():
    var clicked_cell = tile_map_layer.local_to_map(tile_map_layer.get_local_mouse_position())
    var data = tile_map_layer.get_cell_tile_data(clicked_cell)
    if data:
        return data.get_custom_data("power")
    else:
        return 0

Vector2i get_coords_for_body_rid(body: RID) const 🔗

Повертає координати фізичного квадранта (див. physics_quadrant_size) для заданого фізичного тіла RID. Такий RID можна отримати з KinematicCollision2D.get_collider_rid() при зіткненні з плиткою.


RID get_navigation_map() const 🔗

Повернення RID навігації NavigationServer2D, що використовується цим TileMapLayer.

За замовчуванням це повертає навігацію за замовчуванням World2D, якщо надана спеціальна карта set_navigation_map().


Vector2i get_neighbor_cell(coords: Vector2i, neighbor: CellNeighbor) const 🔗

Повертає сусідню комірку з координатами coords, що визначаються напрямком neighbor. Цей метод враховує різні макети, які може приймати TileMap.


TileMapPattern get_pattern(coords_array: Array[Vector2i]) 🔗

Створює та повертає новий TileMapPattern з даного масиву клітин. Дивитись також set_pattern().


Array[Vector2i] get_surrounding_cells(coords: Vector2i) 🔗

Повертає список усіх сусідніх комірок до клітинки в coords. Будь-яка сусідня клітинка є такою, що торкається країв, тому для квадратної клітинки буде повернуто 4 клітинки, для шестикутної – 6 клітинок.


Array[Vector2i] get_used_cells() const 🔗

Повертає масив Vector2i з положеннями всіх клітин, що містять плитку. Клітка вважається порожньою, якщо її ідентифікатор джерела дорівнює -1, його атласний координаційний ідентифікатор Vector2(-1, -1) і його альтернативний ідентифікатор -1.


Array[Vector2i] get_used_cells_by_id(source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = -1) const 🔗

Повертає масив Vector2i з положеннями всіх клітин, що містять плитку. Тілі можуть бути фільтровані відповідно до їх джерела (джерело_id), їх атласні координати (atlas_coords), або альтернативні ідентифікатори (Alternative_tile).

Якщо параметр має значення, встановлене до за замовчуванням, цей параметр не використовується для фільтрування комірки. Таким чином, якщо всі параметри мають відповідні значення за замовчуванням, цей метод повертає той же результат, як get_used_cells().

Клітка вважається порожньою, якщо її ідентифікатор джерела дорівнює -1, його атласний координаційний ідентифікатор Vector2(-1, -1) і його альтернативний ідентифікатор -1.


Rect2i get_used_rect() const 🔗

Повертає прямокутник, який закриває використовувану (не спрагу) плитку карти.


bool has_body_rid(body: RID) const 🔗

Повертає, чи надана параме тіло RID належить до одного з цих TileMapLayer клітин.


bool is_cell_flipped_h(coords: Vector2i) const 🔗

Повертає true, якщо клітинку з координатами coords перевернуто горизонтально. Результат справедливий лише для джерел атласу.


bool is_cell_flipped_v(coords: Vector2i) const 🔗

Повертає true, якщо клітинку з координатами coords перевернуто вертикально. Результат справедливий лише для джерел атласу.


bool is_cell_transposed(coords: Vector2i) const 🔗

Повертає true, якщо клітинку з координатами coords транспоновано. Результат справедливий лише для джерел атласу.


Vector2i local_to_map(local_position: Vector2) const 🔗

Повертає координати на карті комірки, що містить заданий local_position. Якщо local_position знаходиться в глобальних координатах, перед передачею його цьому методу розгляньте можливість використання Node2D.to_local(). Див. також map_to_local().


Vector2i map_pattern(position_in_tilemap: Vector2i, coords_in_pattern: Vector2i, pattern: TileMapPattern) 🔗

Повертає для заданих координат coords_in_pattern у TileMapPattern відповідні координати комірки, якщо візерунок було вставлено в координати position_in_tilemap (див. set_pattern()). Це зіставлення є обов'язковим, оскільки у формах плиток з половинним зміщенням зіставлення може не працювати шляхом обчислення position_in_tile_map + coords_in_pattern.


Vector2 map_to_local(map_position: Vector2i) const 🔗

Повертає центральне положення комірки в локальному координатному просторі TileMapLayer. Щоб перетворити повернуті значення у глобальні координати, скористайтеся Node2D.to_global(). Дивись також local_to_map().

Примітка: Це може не відповідати візуальному положенні плитки, тобто ігнорувати TileData.texture_origin властивість індивідуальної плитки.


void notify_runtime_tile_data_update() 🔗

Повідомляє вузол TileMapLayer, що виклики методу _use_tile_data_runtime_update() або _tile_data_runtime_update() призведуть до різних результатів. Таким чином, це ініціює оновлення TileMapLayer.

Попередження: Оновлення TileMapLayer є обчислювально ресурсоємним і може вплинути на продуктивність. Спробуйте обмежити кількість викликів цієї функції, щоб уникнути непотрібного оновлення.

Примітка: Це не ініціює пряме оновлення TileMapLayer, оновлення буде виконано в кінці кадру як завжди (якщо ви не викличете метод update_internals()).


void set_cell(coords: Vector2i, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = 0) 🔗

Налаштовує ідентифікатори плитки для клітинки при координатах пармові коорди. Кожна плитка TileSet виділяється за допомогою трьох частин:

до Atlas координатний ідентифікатор atlas_coords визначає координати плитки в атласі (якщо джерело є TileSetAtlasSource). Для TileSetScenesCollectionSource він завжди повинен бути Vector2i(0, 0),

до Альтернативний ідентифікатор плитки alternative_tile визначає альтернативну черепицю в атласі (якщо джерело є TileSetAtlasSource), а також місце для TileSetScenesCollectionSource.

Якщо джерело_id встановлюється до -1, atlas_coords до Vector2i(-1, -1), або альтернатив_tile до -1, клітинка буде вилучена. Стирання клітинки отримує all своїх ідентифікаторів автоматично встановлюються до своїх відповідних недійсних значень, а саме -1, Vector2i(-1, -1) і -1.


void set_cells_terrain_connect(cells: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) 🔗

Оновіть усі клітинки в масиві координат cell, щоб вони використовували заданий terrain для заданого terrain_set. Якщо оновлена клітинка має такий самий рельєф, що й одна з її сусідніх клітинок, ця функція намагається об’єднати дві. Ця функція може оновлювати сусідні плитки, якщо потрібно створити правильні переходи місцевості.

Якщо ignore_empty_terrains має значення true, порожні ландшафти ігноруватимуться під час спроби знайти плитку, яка найкраще підходить для заданих обмежень ландшафту.

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


void set_cells_terrain_path(path: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) 🔗

Оновіть усі клітинки в масиві координат path, щоб вони використовували заданий terrain для заданого terrain_set. Функція також з’єднає дві послідовні комірки на шляху з однаковою місцевістю. Ця функція може оновлювати сусідні плитки, якщо потрібно створити правильні переходи місцевості.

Якщо ignore_empty_terrains має значення true, порожні ландшафти ігноруватимуться під час спроби знайти плитку, яка найкраще підходить для заданих обмежень ландшафту.

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


void set_navigation_map(map: RID) 🔗

Настроювання на замовлення map як NavigationServer2D навігаційна карта. Якщо не встановлено, використовує навігацію за замовчуванням World2D.


void set_pattern(position: Vector2i, pattern: TileMapPattern) 🔗

Вставляє TileMapPattern у вказану position на карті плиток. Див. також get_pattern().


void update_internals() 🔗

Тригери прямого оновлення TileMapLayer. Зазвичай, зателефонуйте цю функцію не потрібно, оскільки TileMapLayer оновлення вузлів автоматично при зміні одного з його властивостей або клітин.

Однак, з причин виконання, ці оновлення зараховуються і затримуються до кінця каркасу. Виклик цієї функції змусить TileMapLayer оновити прямо зараз.

Налаштування: Оновлення TileMapLayer обчислюється дорого і може впливати на продуктивність. Спробуйте обмежити кількість оновлень і скільки плитки вони впливають.