TileMap
Устарело: Use multiple TileMapLayer nodes instead. To convert a TileMap to a set of TileMapLayer nodes, open the TileMap bottom panel with the node selected, click the toolbox icon in the top-right corner and choose 'Extract TileMap layers as individual TileMapLayer nodes'.
Наследует: Node2D < CanvasItem < Node < Object
Узел для 2D-карт на основе плиток.
Описание
Узел для создания 2D-карт на основе тайлов. TileMap использует TileSet, содержащий список тайлов для построения сеточных карт. TileMap может иметь несколько слоёв, размещая тайлы друг над другом.
Из соображений производительности все обновления TileMap выполняются пакетно в конце кадра. В частности, это означает, что сценовые тайлы из TileSetScenesCollectionSource могут инициализироваться после своего родителя. Это происходит только при нахождении в дереве сцены.
Для принудительного обновления раньше вызовите update_internals().
Примечание: Для производительности и совместимости координаты, сериализуемые TileMap, ограничены 16-битными знаковыми целыми числами, т.е. диапазон координат X и Y — от -32768 до 32767. При сохранении данных тайлы вне этого диапазона переносятся.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
Методы
void |
_tile_data_runtime_update(layer: int, coords: Vector2i, tile_data: TileData) virtual |
_use_tile_data_runtime_update(layer: int, coords: Vector2i) virtual |
|
void |
|
void |
clear() |
void |
clear_layer(layer: int) |
void |
erase_cell(layer: int, coords: Vector2i) |
void |
|
void |
force_update(layer: int = -1) |
get_cell_alternative_tile(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
get_cell_atlas_coords(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
get_cell_source_id(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
get_cell_tile_data(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
get_coords_for_body_rid(body: RID) |
|
get_layer_for_body_rid(body: RID) |
|
get_layer_modulate(layer: int) const |
|
get_layer_name(layer: int) const |
|
get_layer_navigation_map(layer: int) const |
|
get_layer_y_sort_origin(layer: int) const |
|
get_layer_z_index(layer: int) const |
|
get_layers_count() const |
|
get_navigation_map(layer: int) const |
|
get_neighbor_cell(coords: Vector2i, neighbor: CellNeighbor) const |
|
get_pattern(layer: int, coords_array: Array[Vector2i]) |
|
get_surrounding_cells(coords: Vector2i) |
|
get_used_cells(layer: int) const |
|
get_used_cells_by_id(layer: int, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = -1) const |
|
get_used_rect() const |
|
is_cell_flipped_h(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
is_cell_flipped_v(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
is_cell_transposed(layer: int, coords: Vector2i, use_proxies: bool = false) const |
|
is_layer_enabled(layer: int) const |
|
is_layer_navigation_enabled(layer: int) const |
|
is_layer_y_sort_enabled(layer: int) const |
|
local_to_map(local_position: Vector2) const |
|
map_pattern(position_in_tilemap: Vector2i, coords_in_pattern: Vector2i, pattern: TileMapPattern) |
|
map_to_local(map_position: Vector2i) const |
|
void |
move_layer(layer: int, to_position: int) |
void |
notify_runtime_tile_data_update(layer: int = -1) |
void |
remove_layer(layer: int) |
void |
set_cell(layer: int, coords: Vector2i, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = 0) |
void |
set_cells_terrain_connect(layer: int, cells: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) |
void |
set_cells_terrain_path(layer: int, path: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) |
void |
set_layer_enabled(layer: int, enabled: bool) |
void |
set_layer_modulate(layer: int, modulate: Color) |
void |
set_layer_name(layer: int, name: String) |
void |
set_layer_navigation_enabled(layer: int, enabled: bool) |
void |
set_layer_navigation_map(layer: int, map: RID) |
void |
set_layer_y_sort_enabled(layer: int, y_sort_enabled: bool) |
void |
set_layer_y_sort_origin(layer: int, y_sort_origin: int) |
void |
set_layer_z_index(layer: int, z_index: int) |
void |
set_navigation_map(layer: int, map: RID) |
void |
set_pattern(layer: int, position: Vector2i, pattern: TileMapPattern) |
void |
Сигналы
changed() 🔗
Вызывается при изменении TileSet данного TileMap.
Перечисления
enum VisibilityMode: 🔗
VisibilityMode VISIBILITY_MODE_DEFAULT = 0
Используйте настройки отладки для определения видимости.
VisibilityMode VISIBILITY_MODE_FORCE_HIDE = 2
Всегда скрывается.
VisibilityMode VISIBILITY_MODE_FORCE_SHOW = 1
Всегда показывается.
Описания свойств
bool collision_animatable = false 🔗
Если включено, TileMap увидит, что его столкновения синхронизированы с физическим тиком, и изменит тип столкновения со статического на кинематический. Это необходимо для создания движущейся платформы на основе TileMap.
Примечание: Включение collision_animatable может оказать небольшое влияние на производительность, делайте это только в том случае, если TileMap движется и имеет сталкивающиеся тайлы.
VisibilityMode collision_visibility_mode = 0 🔗
void set_collision_visibility_mode(value: VisibilityMode)
VisibilityMode get_collision_visibility_mode()
Показать или скрыть формы столкновений TileMap. Если установлено значение VISIBILITY_MODE_DEFAULT, это зависит от настроек отладки столкновений.
void set_navigation_visibility_mode(value: VisibilityMode)
VisibilityMode get_navigation_visibility_mode()
Показать или скрыть навигационные сетки TileMap. Если установлено значение VISIBILITY_MODE_DEFAULT, это зависит от настроек отладки навигации показа.
int rendering_quadrant_size = 16 🔗
Размер квадранта TileMap. Квадрант — это группа тайлов, которые нужно нарисовать вместе на одном элементе холста в целях оптимизации. rendering_quadrant_size определяет длину стороны квадрата в системе координат карты, которая образует квадрант. Таким образом, размер квадранта по умолчанию группирует вместе 16 * 16 = 256 плиток.
Размер квадранта не применяется к слоям, отсортированным по Y, так как в этом случае тайлы группируются по положению Y.
Примечание: Поскольку квадранты создаются в соответствии с системой координат карты, «квадратная форма» квадранта может не выглядеть как квадрат в локальной системе координат TileMap.
TileSet, используемый этим TileMap. Здесь хранятся текстуры, столкновения и дополнительное поведение всех доступных плиток.
Описания метода
void _tile_data_runtime_update(layer: int, coords: Vector2i, tile_data: TileData) virtual 🔗
Вызывается с объектом TileData, который будет использоваться внутри TileMap, что позволяет изменять его во время выполнения.
Этот метод вызывается только в том случае, если реализован _use_tile_data_runtime_update() и возвращает true для заданных плиток coords и layer.
Предупреждение: Подресурсы объекта tile_data такие же, как в TileSet. Их изменение может повлиять на весь TileSet. Вместо этого обязательно дублируйте эти ресурсы.
Примечание: Если свойства объекта tile_data должны со временем измениться, используйте notify_runtime_tile_data_update(), чтобы уведомить TileMap о необходимости обновления.
bool _use_tile_data_runtime_update(layer: int, coords: Vector2i) virtual 🔗
Должен возвращать true, если тайл с координатами coords на слое layer требует обновления во время выполнения.
Предупреждение: Убедитесь, что эта функция возвращает true только при необходимости. Любой тайл, обработанный во время выполнения без необходимости, будет означать значительное падение производительности.
Примечание: Если результат этой функции должен измениться, используйте notify_runtime_tile_data_update(), чтобы уведомить TileMap о необходимости обновления.
void add_layer(to_position: int) 🔗
Добавляет слой в указанную позицию to_position в массиве. Если to_position отрицательный, позиция отсчитывается с конца, при этом -1 добавляет слой в конец массива.
void clear() 🔗
Очистка всех ячеек.
void clear_layer(layer: int) 🔗
Очищает все ячейки на указанном слое.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
void erase_cell(layer: int, coords: Vector2i) 🔗
Стирает ячейку на слое layer с координатами coords.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
void fix_invalid_tiles() 🔗
Очищает ячейки, которых нет в наборе плиток.
void force_update(layer: int = -1) 🔗
Устарело: Use notify_runtime_tile_data_update() and/or update_internals() instead.
Принудительно обновляет TileMap и слой layer.
int get_cell_alternative_tile(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает ID альтернативы тайла для ячейки на слое layer по координатам coords.
Если use_proxies равно false, игнорирует прокси тайлов в TileSet, возвращая исходный идентификатор альтернативы. См. TileSet.map_tile_proxy().
Если layer отрицательный, слои перебираются с последнего.
Vector2i get_cell_atlas_coords(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает координаты тайла в атласе для ячейки на слое layer с координатами coords. Возвращает Vector2i(-1, -1) если ячейка не существует.
Если use_proxies равно false, игнорирует тайловые прокси TileSet, возвращая исходный идентификатор координат атласа. См. TileSet.map_tile_proxy().
Если layer отрицательный, слои перебираются с последнего.
int get_cell_source_id(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает ID источника тайла для ячейки на слое layer с координатами coords. Возвращает -1, если ячейка не существует.
Если use_proxies равно false, игнорирует прокси тайлов в TileSet, возвращая исходный идентификатор источника. См. TileSet.map_tile_proxy().
Если layer отрицательный, слои перебираются с последнего.
TileData get_cell_tile_data(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает объект TileData, связанный с заданной ячейкой, или null, если ячейка не существует или не является TileSetAtlasSource.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
func get_clicked_tile_power():
var clicked_cell = tile_map.local_to_map(tile_map.get_local_mouse_position())
var data = tile_map.get_cell_tile_data(0, clicked_cell)
if data:
return data.get_custom_data("power")
else:
return 0
Если use_proxies равен false, игнорирует прокси-серверы плиток TileSet. См. TileSet.map_tile_proxy().
Vector2i get_coords_for_body_rid(body: RID) 🔗
Возвращает координаты тайла для заданного RID физического тела. Такой RID можно получить из KinematicCollision2D.get_collider_rid() при столкновении с тайлом.
int get_layer_for_body_rid(body: RID) 🔗
Возвращает слой тайловой карты тайла для заданного физического тела RID. Такой RID может быть получен из KinematicCollision2D.get_collider_rid() при столкновении с тайлом.
Color get_layer_modulate(layer: int) const 🔗
Возвращает модуляцию слоя TileMap.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
String get_layer_name(layer: int) const 🔗
Возвращает имя слоя TileMap.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
Возвращает RID навигационной карты NavigationServer2D, назначенной указанному слою TileMap layer.
По умолчанию TileMap использует навигационную карту World2D по умолчанию для первого слоя TileMap. Для каждого дополнительного слоя TileMap создается новая навигационная карта для дополнительного слоя.
Чтобы заставить NavigationAgent2D переключаться между навигационными картами слоя TileMap, используйте NavigationAgent2D.set_navigation_map() с навигационной картой, полученной из get_layer_navigation_map().
Если layer отрицательный, доступ к слоям осуществляется с последнего.
int get_layer_y_sort_origin(layer: int) const 🔗
Возвращает начало сортировки Y слоя TileMap.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
int get_layer_z_index(layer: int) const 🔗
Возвращает значение Z-индекса слоя TileMap.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
int get_layers_count() const 🔗
Возвращает количество слоев в TileMap.
Устарело: Use get_layer_navigation_map() instead.
Возвращает RID навигационной карты NavigationServer2D, назначенной указанному слою TileMap layer.
Vector2i get_neighbor_cell(coords: Vector2i, neighbor: CellNeighbor) const 🔗
Возвращает соседнюю ячейку к ячейке с координатами coords, идентифицированной направлением neighbor. Этот метод учитывает различные макеты, которые может принимать TileMap.
TileMapPattern get_pattern(layer: int, coords_array: Array[Vector2i]) 🔗
Создает новый TileMapPattern из указанного слоя и набора ячеек.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
Array[Vector2i] get_surrounding_cells(coords: Vector2i) 🔗
Возвращает список всех соседних ячеек для ячейки с coords.
Array[Vector2i] get_used_cells(layer: int) const 🔗
Возвращает массив Vector2i с позициями всех ячеек, содержащих тайл в указанном слое. Ячейка считается пустой, если её идентификатор источника равен -1, координаты атласа — Vector2(-1, -1), а альтернативный идентификатор — -1.
Если layer отрицательный, слои перебираются с последнего.
Array[Vector2i] get_used_cells_by_id(layer: int, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = -1) const 🔗
Возвращает массив Vector2i с позициями всех ячеек, содержащих тайл в указанном слое. Тайлы могут быть отфильтрованы по их источнику (source_id), координатам атласа (atlas_coords) или альтернативному идентификатору (alternative_tile).
Если параметр имеет значение по умолчанию, он не используется для фильтрации ячеек. Таким образом, если все параметры имеют свои значения по умолчанию, этот метод возвращает тот же результат, что и get_used_cells().
Ячейка считается пустой, если её идентификатор источника равен -1, координаты атласа — Vector2(-1, -1), а альтернативный идентификатор — -1.
Если layer отрицательный, слои перебираются с последнего.
Rect2i get_used_rect() const 🔗
Возвращает прямоугольник, охватывающий используемые (непустые) фрагменты карты, включая все слои.
bool is_cell_flipped_h(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает true, если ячейка на слое layer с координатами coords перевернута по горизонтали. Результат действителен только для источников атласа.
bool is_cell_flipped_v(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает true, если ячейка на слое layer с координатами coords перевернута вертикально. Результат действителен только для источников атласа.
bool is_cell_transposed(layer: int, coords: Vector2i, use_proxies: bool = false) const 🔗
Возвращает true, если ячейка на слое layer с координатами coords транспонирована. Результат действителен только для источников атласа.
bool is_layer_enabled(layer: int) const 🔗
Возвращает, включен ли слой.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
Возвращает значение, если включена генерация встроенных областей навигации слоя.
bool is_layer_y_sort_enabled(layer: int) const 🔗
Возвращает, сортирует ли слой свои тайлы по оси Y.
Если layer отрицательный, слои перебираются с последнего.
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 🔗
Возвращает центрированную позицию ячейки в локальном пространстве координат TileMap. Для преобразования возвращаемого значения в глобальные координаты используйте Node2D.to_global(). См. также local_to_map().
Примечание: Это может не соответствовать визуальной позиции тайла, т.е. игнорируется свойство TileData.texture_origin отдельных тайлов.
void move_layer(layer: int, to_position: int) 🔗
Перемещает слой с индексом layer в заданную позицию to_position в массиве.
void notify_runtime_tile_data_update(layer: int = -1) 🔗
Уведомляет узел TileMap, который вызывает _use_tile_data_runtime_update() или _tile_data_runtime_update(), что приведет к разным результатам. Таким образом, это вызовет обновление TileMap.
Если указан layer, уведомляет только об изменениях для указанного слоя. Предоставление аргумента layer (когда применимо) обычно предпочтительнее по соображениям производительности.
Предупреждение: Обновление TileMap требует больших вычислительных затрат и может повлиять на производительность. Постарайтесь ограничить количество вызовов этой функции, чтобы избежать ненужного обновления.
Примечание: Это не запускает прямое обновление TileMap, обновление будет выполнено в конце кадра, как обычно (если вы не вызовете update_internals()).
void remove_layer(layer: int) 🔗
Удаляет слой с индексом layer.
void set_cell(layer: int, coords: Vector2i, source_id: int = -1, atlas_coords: Vector2i = Vector2i(-1, -1), alternative_tile: int = 0) 🔗
Устанавливает идентификаторы тайла для ячейки в слое layer по координатам coords. Каждый тайл TileSet идентифицируется тремя частями:
Идентификатор источника
source_idопределяет источник TileSetSource. См. TileSet.set_source_id(),Идентификатор координат атласа
atlas_coordsопределяет координаты тайла в атласе (если источник — TileSetAtlasSource). Для TileSetScenesCollectionSource всегда должно бытьVector2i(0, 0)),Идентификатор альтернативного тайла
alternative_tileопределяет альтернативу тайла в атласе (если источник — TileSetAtlasSource) или сцену для TileSetScenesCollectionSource.
Если source_id установлен в -1, atlas_coords — в Vector2i(-1, -1) или alternative_tile — в -1, ячейка стирается. Удалённая ячейка получает все свои идентификаторы автоматически установленными в недействительные значения: -1, Vector2i(-1, -1) и -1.
Если layer отрицательный, слои перебираются с последнего.
void set_cells_terrain_connect(layer: int, cells: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) 🔗
Обновляет все ячейки в массиве координат cells, чтобы они использовали заданный terrain для указанного terrain_set. Если обновлённая ячейка имеет тот же террейн, что и соседняя, функция попытается объединить их. При необходимости функция может обновить соседние тайлы для создания корректных переходов между террейнами.
Если ignore_empty_terrains равно true, пустые террейны будут игнорироваться при поиске наиболее подходящего тайла под заданные ограничения террейнов.
Если layer отрицательный, слои перебираются с последнего.
Примечание: Для корректной работы требуется, чтобы TileSet в TileMap имел настроенные террейны со всеми необходимыми комбинациями террейнов. В противном случае могут возникать непредвиденные результаты.
void set_cells_terrain_path(layer: int, path: Array[Vector2i], terrain_set: int, terrain: int, ignore_empty_terrains: bool = true) 🔗
Обновляет все ячейки в массиве координат path, чтобы они использовали заданный terrain для указанного terrain_set. Функция также соединит две последовательные ячейки в пути с одинаковым террейном. При необходимости функция может обновить соседние тайлы для создания корректных переходов между террейнами.
Если ignore_empty_terrains равно true, пустые террейны будут игнорироваться при поиске наиболее подходящего тайла под заданные ограничения террейнов.
Если layer отрицательный, слои перебираются с последнего.
Примечание: Для корректной работы требуется, чтобы TileSet в TileMap имел настроенные террейны со всеми необходимыми комбинациями террейнов. В противном случае могут возникать непредвиденные результаты.
void set_layer_enabled(layer: int, enabled: bool) 🔗
Включает или отключает слой layer. Отключенный слой вообще не обрабатывается (нет рендеринга, нет физики и т. д.).
Если layer отрицательный, доступ к слоям осуществляется с последнего.
void set_layer_modulate(layer: int, modulate: Color) 🔗
Устанавливает цвет слоя. Он будет умножен на цвет тайла и модуляцию TileMap.
Если layer отрицательный, слои перебираются с последнего.
void set_layer_name(layer: int, name: String) 🔗
Задает имя слоя. Это в основном полезно в редакторе.
Если layer отрицательный, доступ к слоям осуществляется с последнего.
Включает или отключает встроенную генерацию областей навигации слоя. Отключите это, если вам нужно запекать области навигации из TileMap с использованием узла NavigationRegion2D.
Назначает map как навигационную карту NavigationServer2D для указанного слоя TileMap layer.
По умолчанию TileMap использует навигационную карту по умолчанию World2D для первого слоя TileMap. Для каждого дополнительного слоя TileMap создается новая навигационная карта для дополнительного слоя.
Чтобы NavigationAgent2D переключался между навигационными картами слоя TileMap, используйте NavigationAgent2D.set_navigation_map() с навигационной картой, полученной из get_layer_navigation_map().
Если layer отрицательный, доступ к слоям осуществляется с последнего.
void set_layer_y_sort_enabled(layer: int, y_sort_enabled: bool) 🔗
Включает или выключает сортировку слоя по оси Y. Если слой сортируется по оси Y, он будет вести себя как узел CanvasItem, в котором каждый тайл сортируется по оси Y.
Слои с сортировкой по оси Y обычно должны находиться на разных значениях Z-индекса по сравнению со слоями без сортировки по оси Y, иначе каждый из таких слоев будет сортироваться по оси Y целиком вместе с сортируемым слоем. Обычно это нежелательное поведение.
Если layer отрицательный, слои перебираются с последнего.
void set_layer_y_sort_origin(layer: int, y_sort_origin: int) 🔗
Устанавливает значение точки отсчёта сортировки по Y для слоя. Это значение добавляется к точке отсчёта сортировки каждого тайла в слое.
Это позволяет, например, имитировать разную высоту для каждого слоя. Может быть полезно для игр с видом сверху.
Если layer отрицательный, слои перебираются с последнего.
void set_layer_z_index(layer: int, z_index: int) 🔗
Устанавливает значение Z-индекса слоя. Это значение Z-индекса добавляется к значению Z-индекса каждого тайла.
Если layer отрицательный, слои перебираются с последнего.
Устарело: Use set_layer_navigation_map() instead.
Назначает map в качестве навигационной карты NavigationServer2D для указанного слоя TileMap layer.
void set_pattern(layer: int, position: Vector2i, pattern: TileMapPattern) 🔗
Вставляет заданный TileMapPattern в указанную позицию position и слой layer в tilemap.
Если layer отрицательный, слои перебираются с последнего.
void update_internals() 🔗
Запускает прямое обновление TileMap. Обычно вызов этой функции не требуется, так как узел TileMap обновляется автоматически при изменении одного из его свойств или ячеек.
Однако по соображениям производительности эти обновления пакетируются и задерживаются до конца кадра. Вызов этой функции заставит TileMap обновиться немедленно.
Предупреждение: Обновление TileMap требует больших вычислительных затрат и может повлиять на производительность. Попробуйте ограничить количество обновлений и количество плиток, на которые они влияют.