TileSetAtlasSource
繼承: TileSetSource < Resource < RefCounted < Object
以一組圖塊的形式向 TileSet 資源暴露 2D 合集紋理。
說明
合集是在紋理上鋪設的圖塊柵格。柵格中的每個圖塊都必須使用 create_tile() 公開。然後使用它們在柵格中的座標,對這些圖塊進行索引。
每個圖塊也可以在柵格座標中有一個大小,使其在地合集中的儲存格更多或更少。
可以使用 create_alternative_tile() 建立圖塊的替代版本,然後使用替代 ID 對其進行索引。主圖塊(柵格中的那個)使用一個等於 0 的替代 ID 進行存取。
每個圖塊替代品都有一組由源的 TileSet 圖層定義的屬性。這些屬性儲存在 TileData 物件中,該物件可以使用 get_tile_data() 來存取和修改。
由於 TileData 屬性直接儲存在 TileSetAtlasSource 資源中,它們的屬性也可以使用 TileSetAtlasSource.set("<coords_x>:<coords_y>/<alternative_id>/<tile_data_property>") 設定。
屬性
|
||
|
||
|
||
|
方法
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 🔗
Represents cell's horizontal flip flag. Should be used directly with TileMapLayer to flip placed tiles by altering their alternative IDs.
var alternate_id = $TileMapLayer.get_cell_alternative_tile(Vector2i(2, 2))
if not alternate_id & TileSetAtlasSource.TRANSFORM_FLIP_H:
# If tile is not already flipped, flip it.
$TileMapLayer.set_cell(Vector2i(2, 2), source_id, atlas_coords, alternate_id | TileSetAtlasSource.TRANSFORM_FLIP_H)
Note: These transformations can be combined to do the equivalent of 0, 90, 180, and 270 degree rotations, as shown below:
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) 🔗
The base tile size in the texture (in pixel). This size must be bigger than or equal to the TileSet's tile_size value.
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 賦值。
返回新的備選識別字,如果無法使用提供的 alternative_id_override 建立則返回 -1。
void create_tile(atlas_coords: Vector2i, size: Vector2i = Vector2i(1, 1)) 🔗
在座標 atlas_coords 處新建給定大小 size 的圖塊。
Vector2i get_atlas_grid_size() const 🔗
Returns the atlas grid size, which depends on how many tiles can fit in the texture. It thus depends on the texture's size, the atlas margins, and the tiles' texture_region_size.
int get_next_alternative_tile_id(atlas_coords: Vector2i) const 🔗
返回後續呼叫 create_alternative_tile() 時將返回的備選 ID。
Texture2D get_runtime_texture() const 🔗
如果 use_texture_padding 為 false,則返回 texture。否則,建立並返回包含內邊距的內部 ImageTexture。
Rect2i get_runtime_tile_texture_region(atlas_coords: Vector2i, frame: int) const 🔗
返回由 get_runtime_texture() 返回的紋理內給定 frame 的座標 atlas_coords 處的圖塊區塊。
注意:如果 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 🔗
返回位於座標 atlas_coords 的圖塊的第 frame_index 影格的動畫影格時長。
int get_tile_animation_frames_count(atlas_coords: Vector2i) const 🔗
返回位於座標 atlas_coords 的圖塊有多少動畫影格。
TileAnimationMode get_tile_animation_mode(atlas_coords: Vector2i) const 🔗
Returns the tile animation mode of the tile at atlas_coords. See also 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 🔗
返回座標 atlas_coords 處的圖塊的影格持續時間的總和。這個值需要除以動畫速度才能得到實際的動畫迴圈持續時間。
Vector2i get_tile_at_coords(atlas_coords: Vector2i) const 🔗
如果有覆蓋 atlas_coords 座標的圖塊,則返回該圖塊左上角的座標(即它的座標 ID)。否則返回 Vector2i(-1, -1)。
TileData get_tile_data(atlas_coords: Vector2i, alternative_tile: int) const 🔗
返回給定合集座標和備選 ID 對應的 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) 🔗
返回修改以下任意屬性時將會自動移除的圖塊座標 ID 的陣列:texture、margins、separation、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 🔗
返回合集中是否有足夠的空間來使用給定的屬性建立/修改圖塊。如果提供了 ignored_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_size 大小的 new_atlas_coords 座標。如果給定區域中已經存在一個圖塊,則該函式將失敗。
如果 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) 🔗
移除備選 ID 為 alternative_tile 的備選圖塊。
使用為 0 的 alternative_tile 呼叫這個函式會失敗,因為基礎圖塊備選項無法被移除。
void remove_tile(atlas_coords: Vector2i) 🔗
移除位於座標 atlas_coords 的圖塊及其備選項。
void set_alternative_tile_id(atlas_coords: Vector2i, alternative_tile: int, new_id: int) 🔗
將圖塊的備選 ID 從 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) 🔗
設定位於座標 atlas_coords 的圖塊動畫影格 frame_index 的持續時間 duration。
void set_tile_animation_frames_count(atlas_coords: Vector2i, frames_count: int) 🔗
設定位於座標 atlas_coords 的圖塊有多少動畫影格。
void set_tile_animation_mode(atlas_coords: Vector2i, mode: TileAnimationMode) 🔗
Sets the tile animation mode of the tile at atlas_coords to mode. See also 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 的圖塊的動畫速度。