📝
【Godot Engine】RichTextLabelのスクロール処理を自作する
はじめに
RichTextLabel
を使用する際はscroll_following
を有効化することで追加した文章に合わせて自動でスクロールすることができますが、最下行への移動が一瞬で終わります。
私はスクロール中に一瞬でも途中の行を表示させたかったので、自力でスクロール処理を作成しました。
方法
Main.gd
extends Control
@onready var richtextlabel:RichTextLabel = $RichTextLabel
@onready var textedit:TextEdit = $TextEdit
var count:int = 0
var propetytween:PropertyTweener
var tween:Tween
## textをrichtextlabel.textに追加
func submit(text:String):
count += 1
richtextlabel.add_text("{0}: {1}".format([count, text]))
richtextlabel.newline()
# これがないと一度に10行程度入力した時に最下行までスクロールしません
richtextlabel.get_line_count()
var bar:VScrollBar = richtextlabel.get_v_scroll_bar()
if(tween != null):
tween.kill()
tween = get_tree().create_tween()
propetytween = tween.tween_property(bar, "value", bar.max_value, 0.3)
pass
func _on_button_pressed():
submit(textedit.text)
このコードでは、Main
シーンのButtonを押下した時、
textedit.text
の値をrichtextlabel.text
に追加しています。
richtextlabel.get_line_count()
を使用することでbar.max_value
を更新し、tween.tween_property()
で最下行へのスクロールができるようになっています。
tween.kill()
を入れておかないと、Buttonを連続で押した時にスクロールの挙動が不安定になります。
気になる方は入れておきましょう。
サンプルコード
参考記事
Discussion