TileSetAtlasSource

Наследует: TileSetSource < Resource < RefCounted < Object

Предоставляет 2D-текстуру атласа как набор плиток для ресурса TileSet.

Описание

Атлас — это сетка тайлов, расположенных на текстуре. Каждый тайл в сетке должен быть создан методом create_tile(). Эти тайлы индексируются по их координатам в сетке.

Каждый тайл также может иметь размер в координатах сетки, занимая больше или меньше ячеек в атласе.

Альтернативные версии тайла создаются методом create_alternative_tile() и индексируются по альтернативному идентификатору. Основной тайл (сеточный) доступен при альтернативном идентификаторе, равном 0.

Каждый альтернативный тайл имеет набор свойств, определяемых слоями TileSet источника. Эти свойства хранятся в объекте TileData, доступном для чтения и изменения через get_tile_data().

Поскольку свойства TileData хранятся непосредственно в ресурсе TileSetAtlasSource, их также можно задать через TileSetAtlasSource.set("<координата_x>:<координата_y>/<альтернативный_id>/<свойство_tiledata>").

Свойства

Vector2i

margins

Vector2i(0, 0)

Vector2i

separation

Vector2i(0, 0)

Texture2D

texture

Vector2i

texture_region_size

Vector2i(16, 16)

bool

use_texture_padding

true

Методы

void

clear_tiles_outside_texture()

int

create_alternative_tile(atlas_coords: Vector2i, alternative_id_override: int = -1)

void

create_tile(atlas_coords: Vector2i, size: Vector2i = Vector2i(1, 1))

Vector2i

get_atlas_grid_size() const

int

get_next_alternative_tile_id(atlas_coords: Vector2i) const

Texture2D

get_runtime_texture() const

Rect2i

get_runtime_tile_texture_region(atlas_coords: Vector2i, frame: int) const

int

get_tile_animation_columns(atlas_coords: Vector2i) const

float

get_tile_animation_frame_duration(atlas_coords: Vector2i, frame_index: int) const

int

get_tile_animation_frames_count(atlas_coords: Vector2i) const

TileAnimationMode

get_tile_animation_mode(atlas_coords: Vector2i) const

Vector2i

get_tile_animation_separation(atlas_coords: Vector2i) const

float

get_tile_animation_speed(atlas_coords: Vector2i) const

float

get_tile_animation_total_duration(atlas_coords: Vector2i) const

Vector2i

get_tile_at_coords(atlas_coords: Vector2i) const

TileData

get_tile_data(atlas_coords: Vector2i, alternative_tile: int) const

Vector2i

get_tile_size_in_atlas(atlas_coords: Vector2i) const

Rect2i

get_tile_texture_region(atlas_coords: Vector2i, frame: int = 0) const

PackedVector2Array

get_tiles_to_be_removed_on_change(texture: Texture2D, margins: Vector2i, separation: Vector2i, texture_region_size: Vector2i)

bool

has_room_for_tile(atlas_coords: Vector2i, size: Vector2i, animation_columns: int, animation_separation: Vector2i, frames_count: int, ignored_tile: Vector2i = Vector2i(-1, -1)) const

bool

has_tiles_outside_texture() const

void

move_tile_in_atlas(atlas_coords: Vector2i, new_atlas_coords: Vector2i = Vector2i(-1, -1), new_size: Vector2i = Vector2i(-1, -1))

void

remove_alternative_tile(atlas_coords: Vector2i, alternative_tile: int)

void

remove_tile(atlas_coords: Vector2i)

void

set_alternative_tile_id(atlas_coords: Vector2i, alternative_tile: int, new_id: int)

void

set_tile_animation_columns(atlas_coords: Vector2i, frame_columns: int)

void

set_tile_animation_frame_duration(atlas_coords: Vector2i, frame_index: int, duration: float)

void

set_tile_animation_frames_count(atlas_coords: Vector2i, frames_count: int)

void

set_tile_animation_mode(atlas_coords: Vector2i, mode: TileAnimationMode)

void

set_tile_animation_separation(atlas_coords: Vector2i, separation: Vector2i)

void

set_tile_animation_speed(atlas_coords: Vector2i, speed: float)


Перечисления

enum TileAnimationMode: 🔗

TileAnimationMode TILE_ANIMATION_MODE_DEFAULT = 0

Анимация плиток запускается одновременно и выглядит идентично.

TileAnimationMode TILE_ANIMATION_MODE_RANDOM_START_TIMES = 1

Анимация плиток запускается в случайные моменты времени и выглядит разнообразно.

TileAnimationMode TILE_ANIMATION_MODE_MAX = 2

Представляет размер перечисления TileAnimationMode.


Константы

TRANSFORM_FLIP_H = 4096 🔗

Представляет флаг горизонтального переворота ячейки. Следует использовать напрямую с TileMapLayer для переворота размещенных тайлов путем изменения их альтернативных идентификаторов (ID).

var alternate_id = $TileMapLayer.get_cell_alternative_tile(Vector2i(2, 2))
if not alternate_id & TileSetAtlasSource.TRANSFORM_FLIP_H:
    # Если тайл еще не перевернут, переверните его.
    $TileMapLayer.set_cell(Vector2i(2, 2), source_id, atlas_coords, alternate_id | TileSetAtlasSource.TRANSFORM_FLIP_H)

Примечание: Эти преобразования можно объединить для создания эквивалента поворотов на 0, 90, 180 и 270 градусов, как показано ниже:

enum TileTransform {
    ROTATE_0 = 0,
    ROTATE_90 = TileSetAtlasSource.TRANSFORM_TRANSPOSE | TileSetAtlasSource.TRANSFORM_FLIP_H,
    ROTATE_180 = TileSetAtlasSource.TRANSFORM_FLIP_H | TileSetAtlasSource.TRANSFORM_FLIP_V,
    ROTATE_270 = TileSetAtlasSource.TRANSFORM_TRANSPOSE | TileSetAtlasSource.TRANSFORM_FLIP_V,
}

TRANSFORM_FLIP_V = 8192 🔗

Представляет флаг вертикального переворота ячейки. См. TRANSFORM_FLIP_H для использования.

TRANSFORM_TRANSPOSE = 16384 🔗

Представляет транспонированный флаг ячейки. См. TRANSFORM_FLIP_H для использования.


Описания свойств

Vector2i margins = Vector2i(0, 0) 🔗

Поля в пикселях для смещения начала сетки в текстуре.


Vector2i separation = Vector2i(0, 0) 🔗

Разделение в пикселях между каждой областью текстуры тайла сетки.


Texture2D texture 🔗

Текстура атласа.


Vector2i texture_region_size = Vector2i(16, 16) 🔗

  • void set_texture_region_size(value: Vector2i)

  • Vector2i get_texture_region_size()

Базовый размер тайла в текстуре (в пикселях). Этот размер должен быть больше или равен значению tile_size TileSet.


bool use_texture_padding = true 🔗

  • void set_use_texture_padding(value: bool)

  • bool get_use_texture_padding()

Если true, генерирует внутреннюю текстуру с дополнительным отступом в один пиксель вокруг каждого тайла. Отступ текстуры позволяет избежать распространенного артефакта, когда линии появляются между тайлами.

Отключение этого параметра может привести к небольшому улучшению производительности, поскольку создание внутренней текстуры требует как памяти, так и времени обработки при изменении ресурса TileSetAtlasSource.


Описания метода

void clear_tiles_outside_texture() 🔗

Удаляет все тайлы, которые не вписываются в доступную область текстуры. Этот метод перебирает все тайлы источника, поэтому рекомендуется заранее использовать has_tiles_outside_texture().


int create_alternative_tile(atlas_coords: Vector2i, alternative_id_override: int = -1) 🔗

Создает альтернативный тайл для тайла с координатами atlas_coords. Если alternative_id_override равен -1, назначает автоматически сгенерированный уникальный ID, в противном случае использует указанный ID.

Возвращает новый идентификатор альтернативы или -1, если альтернатива не может быть создана с предоставленным alternative_id_override.


void create_tile(atlas_coords: Vector2i, size: Vector2i = Vector2i(1, 1)) 🔗

Создает новый тайл с координатами atlas_coords с заданным size.


Vector2i get_atlas_grid_size() const 🔗

Возвращает размер сетки атласа, который зависит от того, сколько плиток может поместиться в текстуре. Таким образом, он зависит от размера texture, margins атласа и texture_region_size плиток.


int get_next_alternative_tile_id(atlas_coords: Vector2i) const 🔗

Возвращает альтернативный идентификатор, который вернет следующий вызов create_alternative_tile().


Texture2D get_runtime_texture() const 🔗

Если use_texture_padding равно false, возвращает texture. В противном случае возвращает внутренний объект ImageTexture, созданный с учетом отступов.


Rect2i get_runtime_tile_texture_region(atlas_coords: Vector2i, frame: int) const 🔗

Возвращает область тайла с координатами atlas_coords для заданного frame внутри текстуры, возвращаемой get_runtime_texture().

Примечание: Если use_texture_padding равен false, возвращает то же, что и get_tile_texture_region().


int get_tile_animation_columns(atlas_coords: Vector2i) const 🔗

Возвращает количество столбцов, которые тайл в atlas_coords имеет в своем макете анимации.


float get_tile_animation_frame_duration(atlas_coords: Vector2i, frame_index: int) const 🔗

Возвращает длительность кадра анимации кадра frame_index для тайла с координатами atlas_coords.


int get_tile_animation_frames_count(atlas_coords: Vector2i) const 🔗

Возвращает количество кадров анимации, которые имеет тайл с координатами atlas_coords.


TileAnimationMode get_tile_animation_mode(atlas_coords: Vector2i) const 🔗

Возвращает режим анимации тайла по координатам atlas_coords. См. также set_tile_animation_mode().


Vector2i get_tile_animation_separation(atlas_coords: Vector2i) const 🔗

Возвращает расстояние (как в сетке атласа) между кадрами анимированного тайла по координатам atlas_coords.


float get_tile_animation_speed(atlas_coords: Vector2i) const 🔗

Возвращает скорость анимации тайла по координатам atlas_coords.


float get_tile_animation_total_duration(atlas_coords: Vector2i) const 🔗

Возвращает общую длительность (sum of the sum) всех кадров анимации тайла по координатам atlas_coords. Это значение необходимо разделить на скорость анимации, чтобы получить фактическую длительность цикла анимации.


Vector2i get_tile_at_coords(atlas_coords: Vector2i) const 🔗

Если есть тайл, покрывающий координаты atlas_coords, возвращает верхние левые координаты тайла (следовательно, его идентификатор координат). В противном случае возвращает Vector2i(-1, -1).


TileData get_tile_data(atlas_coords: Vector2i, alternative_tile: int) const 🔗

Возвращает объект TileData для указанных координат атласа и альтернативного идентификатора.


Vector2i get_tile_size_in_atlas(atlas_coords: Vector2i) const 🔗

Возвращает размер тайла (в системе координат сетки) в координатах atlas_coords.


Rect2i get_tile_texture_region(atlas_coords: Vector2i, frame: int = 0) const 🔗

Возвращает текстурную область тайла в текстуре атласа. Для анимированных тайлов аргумент frame может быть предоставлен для различных кадров анимации.


PackedVector2Array get_tiles_to_be_removed_on_change(texture: Texture2D, margins: Vector2i, separation: Vector2i, texture_region_size: Vector2i) 🔗

Возвращает массив идентификаторов координат плиток, которые будут автоматически удалены при изменении одного или нескольких из этих свойств: texture, margins, section или texture_region_size. Это можно использовать для отмены изменений, которые могли бы привести к потере данных плиток.


bool has_room_for_tile(atlas_coords: Vector2i, size: Vector2i, animation_columns: int, animation_separation: Vector2i, frames_count: int, ignored_tile: Vector2i = Vector2i(-1, -1)) const 🔗

Возвращает, достаточно ли места в атласе для создания/изменения тайла с заданными свойствами. Если указан passed_tile, действовать так, как будто заданный тайл отсутствует в атласе. Это можно использовать, когда вы хотите изменить свойства тайла.


bool has_tiles_outside_texture() const 🔗

Проверяет, есть ли в источнике тайлы, которые не попадают в область текстуры (частично или полностью).


void move_tile_in_atlas(atlas_coords: Vector2i, new_atlas_coords: Vector2i = Vector2i(-1, -1), new_size: Vector2i = Vector2i(-1, -1)) 🔗

Перемещает тайл и его альтернативы из координат atlas_coords в координаты new_atlas_coords с размером new_size. Функция завершится ошибкой, если в указанной области уже присутствует тайл.

Если new_atlas_coords равен Vector2i(-1, -1), сохраняются текущие координаты тайла. Если new_size равен Vector2i(-1, -1), сохраняется текущий размер тайла.

Чтобы избежать ошибки, сначала проверьте возможность перемещения с помощью has_room_for_tile().


void remove_alternative_tile(atlas_coords: Vector2i, alternative_tile: int) 🔗

Удалить альтернативу тайла с альтернативным идентификатором alternative_tile.

Вызов этой функции с alternative_tile, равным 0, завершится ошибкой, так как базовая альтернатива тайла не может быть удалена.


void remove_tile(atlas_coords: Vector2i) 🔗

Удалить тайл и его альтернативу по координатам atlas_coords.


void set_alternative_tile_id(atlas_coords: Vector2i, alternative_tile: int, new_id: int) 🔗

Измените альтернативный идентификатор тайла с alternative_tile на new_id.

Вызов этой функции с new_id равным 0 завершится ошибкой, так как базовую альтернативу тайла нельзя переместить.


void set_tile_animation_columns(atlas_coords: Vector2i, frame_columns: int) 🔗

Устанавливает количество столбцов в макете анимации тайла по координатам atlas_coords. Если установлено значение 0, то различные кадры анимации располагаются в атласе как одна горизонтальная линия.


void set_tile_animation_frame_duration(atlas_coords: Vector2i, frame_index: int, duration: float) 🔗

Устанавливает кадр анимации duration кадра frame_index для тайла по координатам atlas_coords.


void set_tile_animation_frames_count(atlas_coords: Vector2i, frames_count: int) 🔗

Устанавливает количество кадров анимации для тайла по координатам atlas_coords.


void set_tile_animation_mode(atlas_coords: Vector2i, mode: TileAnimationMode) 🔗

Устанавливает режим анимации тайла в atlas_coords на mode. См. также get_tile_animation_mode().


void set_tile_animation_separation(atlas_coords: Vector2i, separation: Vector2i) 🔗

Устанавливает отступ (в ячейках сетки) между каждым тайлом в макете анимации тайла по координатам atlas_coords.


void set_tile_animation_speed(atlas_coords: Vector2i, speed: float) 🔗

Устанавливает скорость анимации тайла по координатам atlas_coords.