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>").
Свойства
|
||
|
||
|
||
|
Методы
void |
|
create_alternative_tile(atlas_coords: Vector2i, alternative_id_override: int = -1) |
|
void |
create_tile(atlas_coords: Vector2i, size: Vector2i = Vector2i(1, 1)) |
get_atlas_grid_size() const |
|
get_next_alternative_tile_id(atlas_coords: Vector2i) const |
|
get_runtime_texture() const |
|
get_runtime_tile_texture_region(atlas_coords: Vector2i, frame: int) const |
|
get_tile_animation_columns(atlas_coords: Vector2i) const |
|
get_tile_animation_frame_duration(atlas_coords: Vector2i, frame_index: int) const |
|
get_tile_animation_frames_count(atlas_coords: Vector2i) const |
|
get_tile_animation_mode(atlas_coords: Vector2i) const |
|
get_tile_animation_separation(atlas_coords: Vector2i) const |
|
get_tile_animation_speed(atlas_coords: Vector2i) const |
|
get_tile_animation_total_duration(atlas_coords: Vector2i) const |
|
get_tile_at_coords(atlas_coords: Vector2i) const |
|
get_tile_data(atlas_coords: Vector2i, alternative_tile: int) const |
|
get_tile_size_in_atlas(atlas_coords: Vector2i) const |
|
get_tile_texture_region(atlas_coords: Vector2i, frame: int = 0) const |
|
get_tiles_to_be_removed_on_change(texture: Texture2D, margins: Vector2i, separation: Vector2i, texture_region_size: Vector2i) |
|
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 |
|
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) 🔗
Разделение в пикселях между каждой областью текстуры тайла сетки.
Текстура атласа.
Vector2i texture_region_size = Vector2i(16, 16) 🔗
Базовый размер тайла в текстуре (в пикселях). Этот размер должен быть больше или равен значению tile_size TileSet.
bool use_texture_padding = true 🔗
Если 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.