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...
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.