动态创建动画以显示文本

时间:2019-12-01 17:44:39

标签: godot gdscript

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

我要在代码中重新创建的是此动画:
animation track in the editor
因此,在标签的属性visible_characters上具有属性轨道的动画,其中更新模式为连续,插值模式为线性

场景的结构是:
scene structure

“对话框”节点后面的脚本:

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动画正在播放

输出窗口中的打印数据为:

  

**调试过程已开始**
  Godot Engine v3.1.2.stable.mono.official-https://godotengine.org
  OpenGL ES 3.0渲染器:AMD Radeon R7 200系列
  标签文字:Magnam consequatur vel alias earum accusantium。 Nobis voluptatem voluptatem quaerat adipisci voluptas。 Numquam id错误earum consectetur veniam。 Quaerat quibusdam quas sunt alias et blanditiis corporis。丘比特性骚动奎德姆。马格南(Magnam)结果别名别名羽扇豆。 Nobis voluptatem voluptatem quaerat adipisci voluptas。 Numquam id错误earum consectetur veniam。 Quaerat quibusdam quas sunt alias et blanditiis
  动画长度:4.44
  正在播放:True
  当前动画:show-text
  **调试过程已停止**

1 个答案:

答案 0 :(得分:1)

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

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

animation.set_length(animationLength)