0 votes

Import the following test code into a label, then select the code and press Shift+Tab to correct the idention I did for this question, and type a lot of text in the label, with a lot of spaces, something like: A1 A1 A1 A1 A1 A1

    extends Label

    var i = 0
    var CharCount = get_text().length()
    var TimerStorage = 0
    var DelayText = 0.01#Speed of text

    func _ready():
        set_visible_characters(0)
        print("This is the char length of the text: "+str(CharCount))

    func _process(delta):
        if get_visible_characters() < CharCount:
            print("Current get_visible_character() "+str(get_visible_characters()) + " And, get_percent_visible() "+ str(get_percent_visible()))
            TimerStorage += delta

            if TimerStorage > DelayText:
                TimerStorage = 0
                set_visible_characters(get_visible_characters() + 1)

Your printable output is something like:

Current get_visible_character() 0 And, get_percent_visible() 0
Current get_visible_character() 1 And, get_percent_visible() 0.055556
Current get_visible_character() 2 And, get_percent_visible() 0.111111
Current get_visible_character() 3 And, get_percent_visible() 0.166667
Current get_visible_character() 4 And, get_percent_visible() 0.222222
Current get_visible_character() 5 And, get_percent_visible() 0.277778
Current get_visible_character() 6 And, get_percent_visible() 0.333333
Current get_visible_character() 7 And, get_percent_visible() 0.388889
Current get_visible_character() 8 And, get_percent_visible() 0.444444
Current get_visible_character() 9 And, get_percent_visible() 0.5
Current get_visible_character() 10 And, get_percent_visible() 0.555556
Current get_visible_character() 11 And, get_percent_visible() 0.611111
Current get_visible_character() 12 And, get_percent_visible() 0.666667
Current get_visible_character() 13 And, get_percent_visible() 0.722222
Current get_visible_character() 14 And, get_percent_visible() 0.777778
Current get_visible_character() 15 And, get_percent_visible() 0.833333
Current get_visible_character() 16 And, get_percent_visible() 0.888889
Current get_visible_character() 17 And, get_percent_visible() 0.944444
Current get_visible_character() 18 And, get_percent_visible() 1
Current get_visible_character() 19 And, get_percent_visible() 1.055556
Current get_visible_character() 20 And, get_percent_visible() 1.111111
Current get_visible_character() 21 And, get_percent_visible() 1.166667
Current get_visible_character() 22 And, get_percent_visible() 1.222222
Current get_visible_character() 23 And, get_percent_visible() 1.277778
Current get_visible_character() 24 And, get_percent_visible() 1.333333
Current get_visible_character() 25 And, get_percent_visible() 1.388889

The percent visible should not be > 1, the get_visible_character() does not take into account the space between letters. Is this intended? I don't see it specified in the documentation.

Did I stepped into a bug? o.O

My workaround was to discover how much percent a single char is based on your text:

var DiscoverPercentAddPerChar = float(0)
set_visible_characters(0)
set_visible_characters(1)
DiscoverPercentAddPerChar = get_percent_visible()

Because the get_percent_visible() does consider the spaces.

-Funny thing, I discovered this because I played a sound for every set_visible_characters(get_visible_characters() + 1) and it continued to play despite no more text was needed to be showed.

in Engine by (376 points)

Nevermind, it is specified it does not count spaces.

Topics related to subject:

https://github.com/godotengine/godot/issues/27896

https://github.com/godotengine/godot/pull/37969

What it looks like the get_total_character_count() is getting an upgrade/option? in Godot 4.0 to count spaces.

1 Answer

+1 vote
Best answer

I completed a simple typewrited effect, and for anyone following the same issue I had, the workaround for now is by using the count("A"), which will count the amount of "A" a string letter or phrase it appears.

var SpacesToRemove = get_text().count(" ")

#Then later in my code I did:
LastCharCount = get_visibile_characters()
set_text(get_text + str(AdditionalText))
set_visible_characters(LastCharCount - AdditionalSpaces)
#So from here forward my typewriter effect can pick up, this was for additional lines in a label.

I tried with a RichTextLabel but didn't get what I wanted for this specific case. Keep in mind the same functions works differently in Label and RichTextLabel. Most of the time with a RichTextLabel you have to use yield(get_tree(), "idle_frame")

by (376 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.