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.

SpriteFrames

继承: Resource < RefCounted < Object

精灵帧库,用于 AnimatedSprite2D 和 AnimatedSprite3D。

描述

AnimatedSprite2DAnimatedSprite3D 节点的精灵帧库。包含帧和用于播放的动画信息。

方法

void

add_animation(anim: StringName)

void

add_frame(anim: StringName, texture: Texture2D, duration: float = 1.0, at_position: int = -1)

void

clear(anim: StringName)

void

clear_all()

void

duplicate_animation(anim_from: StringName, anim_to: StringName)

bool

get_animation_loop(anim: StringName) const

LoopMode

get_animation_loop_mode(anim: StringName) const

PackedStringArray

get_animation_names() const

float

get_animation_speed(anim: StringName) const

int

get_frame_count(anim: StringName) const

float

get_frame_duration(anim: StringName, idx: int) const

Texture2D

get_frame_texture(anim: StringName, idx: int) const

bool

has_animation(anim: StringName) const

void

remove_animation(anim: StringName)

void

remove_frame(anim: StringName, idx: int)

void

rename_animation(anim: StringName, newname: StringName)

void

set_animation_loop(anim: StringName, loop: bool)

void

set_animation_loop_mode(anim: StringName, loop_mode: LoopMode)

void

set_animation_speed(anim: StringName, fps: float)

void

set_frame(anim: StringName, idx: int, texture: Texture2D, duration: float = 1.0)


枚举

enum LoopMode: 🔗

LoopMode LOOP_NONE = 0

动画只播放一次,播放到末尾时就会停止;如果是倒放,则播放到开头时停止。

LoopMode LOOP_LINEAR = 1

当动画到达结尾时,会从开头重新开始;如果逆序播放,则从结尾重新开始,从而实现连续不断的循环。

LoopMode LOOP_PINGPONG = 2

动画每次到达结尾或开头时都会交替播放方向,反复进行正向播放和逆向播放。

注意: AnimatedSprite2DAnimatedSprite3D 在动画循环的每一端,仅播放一次首帧/尾帧的完整时长(而不是两次,即不会在正向和逆向播放方向各播放一次)。


方法说明

void add_animation(anim: StringName) 🔗

向库中添加新动画 anim


void add_frame(anim: StringName, texture: Texture2D, duration: float = 1.0, at_position: int = -1) 🔗

anim 动画中添加一帧。如果 at_position-1,则该帧会添加至该动画的末尾。duration 指定的是相对时长,详见 get_frame_duration()


void clear(anim: StringName) 🔗

删除 anim 动画中的所有帧。


void clear_all() 🔗

移除所有动画。将创建名为 default 的空动画。


void duplicate_animation(anim_from: StringName, anim_to: StringName) 🔗

将动画 anim_from 复制为名叫 anim_to 的新动画。如果 anim_to 已存在或 anim_from 不存在则会失败。


bool get_animation_loop(anim: StringName) const 🔗

已弃用: Use get_animation_loop_mode() instead.

如果 get_animation_loop_mode(anim) == LOOP_LINEAR(即获取到的动画循环模式为线性循环),则返回 true。否则,返回 false


LoopMode get_animation_loop_mode(anim: StringName) const 🔗

返回 anim 动画的循环模式。


PackedStringArray get_animation_names() const 🔗

返回一个包含每个动画的名称的数组。值按字母顺序排列。


float get_animation_speed(anim: StringName) const 🔗

返回 anim 动画的速度,单位为帧每秒。


int get_frame_count(anim: StringName) const 🔗

返回 anim 动画中的帧数。


float get_frame_duration(anim: StringName, idx: int) const 🔗

返回 anim 动画中 idx 帧的相对持续时间(默认为 1.0)。例如,持续时间为 2.0 的帧的显示长度是持续时间为 1.0 的帧的两倍。可以使用如下公式计算某一帧的绝对持续时间(单位为秒):

absolute_duration = relative_duration / (animation_fps * abs(playing_speed))

在这个例子中,playing_speedAnimatedSprite2D.get_playing_speed()AnimatedSprite3D.get_playing_speed()


Texture2D get_frame_texture(anim: StringName, idx: int) const 🔗

返回 anim 动画中帧索引为 idx 的纹理。


bool has_animation(anim: StringName) const 🔗

如果 anim 动画存在,则返回 true


void remove_animation(anim: StringName) 🔗

移除 anim 动画。


void remove_frame(anim: StringName, idx: int) 🔗

移除 anim 动画中索引为 idx 的帧。


void rename_animation(anim: StringName, newname: StringName) 🔗

anim 动画的名称更改为 newname


void set_animation_loop(anim: StringName, loop: bool) 🔗

已弃用: Use set_animation_loop_mode() instead.

如果 loopfalse,则等同于 set_animation_loop_mode(LOOP_NONE)

如果 looptrue,则等同于 set_animation_loop_mode(LOOP_LINEAR)


void set_animation_loop_mode(anim: StringName, loop_mode: LoopMode) 🔗

anim 动画设置 loop_mode(循环模式)。


void set_animation_speed(anim: StringName, fps: float) 🔗

设置 anim 动画的速度,单位为帧每秒。


void set_frame(anim: StringName, idx: int, texture: Texture2D, duration: float = 1.0) 🔗

设置 anim 动画中索引为 idx 的帧的纹理 texture 和持续时间 durationduration 指定的是相对时长,详见 get_frame_duration()