动态创建用于显示文本的动画

Dynamically create animation for showing text

我目前正在尝试动态创建动画并根据文本长度和设置的每秒字符速度播放它以显示文本。

我试图在代码中重新创建的是这个动画:

因此,在标签 属性 visible_characters 上带有 属性 轨道的动画在连续更新模式和线性

插值模式下

场景结构为:

DialogBox节点后面的脚本:

extends Control

export(String, MULTILINE) var Text = ""
export(int) var CharactersPerSecond = 100

func _ready():
    $Panel/Label.set_text(Text)
    print($Panel/Label.get_text())
    createAnimation()
    $AnimationPlayer.play("show-text")
    print("is playing " + str($AnimationPlayer.is_playing()))
    print("current animation " + $AnimationPlayer.current_animation)

func createAnimation():
    var animationLength = Text.length() / (CharactersPerSecond as float)

    print(animationLength)

    var animation = $AnimationPlayer.get_animation("show-text")
    animation.clear()

    var trackIdx = animation.add_track(Animation.TYPE_VALUE)
    animation.track_set_path(trackIdx, "Panel/Label:visible_characters")
    animation.track_set_interpolation_type(trackIdx,Animation.INTERPOLATION_LINEAR)
    animation.value_track_set_update_mode(trackIdx, Animation.UPDATE_CONTINUOUS)

    animation.track_insert_key(trackIdx, 0, 0)
    animation.track_insert_key(trackIdx, animationLength, Text.length())

出于测试目的,使用导出的 Text 变量在编辑器中设置文本,并且是一些 lorem ipsum。

当我 运行 场景是面板和标签显示但标签中没有显示文本时发生的情况,它保持为空,但根据打印语句 show-text 动画是播放

输出window中的打印数据为:

** Debug Process Started **
Godot Engine v3.1.2.stable.mono.official - https://godotengine.org
OpenGL ES 3.0 Renderer: AMD Radeon R7 200 Series
label text: Magnam consequatur vel alias earum accusantium. Nobis voluptatem voluptatem quaerat adipisci voluptas. Numquam id error earum consectetur veniam. Quaerat quibusdam quas sunt alias et blanditiis corporis. Cupiditate rem ut natus est molestiae quidem. Magnam consequatur vel alias earum accusantium. Nobis voluptatem voluptatem quaerat adipisci voluptas. Numquam id error earum consectetur veniam. Quaerat quibusdam quas sunt alias et blanditiis
animationlength: 4.44
is playing: True
current animation: show-text
** Debug Process Stopped **

所以问题是我仍然需要设置动画的长度
仅仅插入钥匙是不够的

animation.clear() 修复后添加以下行:

animation.set_length(animationLength)