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
以一組圖塊的形式向 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 🔗
If use_texture_padding is false, returns texture. Otherwise, returns an internal ImageTexture created that includes the padding.
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 的圖塊的動畫速度。