Найти тему
Игровой движок Godot engine

№128. Практика. Печать текста с паузами.

В этой небольшой статье соберем логику для печати текста.
Задача : Каждый раз когда в тексте попадается точка или запятая, печать должна приостанавливаться.

Пример :

Печатать будем в RichTextLabel, с использованием BBcode. Если вы не понимаете о чем речь, то советую почитать для начала вот эти статьи — раз, два.

Закидываем в сцену RichTextLabel. И подключаем на рут скрипт.

-2

Начинаем писать код.
Для начала нам надо вынести текст который мы будем печатать в переменную.

-3

Как можно заметить, в тексте присутствуют переносы строк (\n). Чуть позже мы к этому вернемся.
Пропишем основные моменты в ready().
Включение ББкода, установка текста из переменной, и сразу скинем видимость символов в ноль.

-4

Далее займемся непосредственно фукцией печати. В ней мы будем брать длину текста, и стартовать цикл в котором будем «открывать» следующий символ строки.
Для того чтобы цикл не печатал всё и сразу, притормозим его при помощи yield().

-5

Дописываем в ready() небольшую задержку , и старт нашей функции.

-6

Результатом будет следующее:

-7

Печать идет вполне себе правильно. Осталось добавить паузы.
Для этого добавим условие, в котором будем проверять текущий символ.
И если он равен точке или запятой, то делаем паузу в печати чуть больше чем обычно.

-8

Проверяем:

-9

Паузы появились… Но добавился какой то глюк.
Выше я писал что для переноса строк у нас используется «\n». И этот перенос строки считается годо как символ. Каждый раз при сносе строки, наш счетчик символов прибавляет один. Поэтому нам надо это отлавливать, и корректировать печать.
ДАЛЬНЕЙШЕЕ возможно не совсем правильно. Но , я не смог ничего лучше придумать )
Итак как отловить перенос строки ? Ведь это по сути не символ. Проверка на пробел ничего не дала, и я решил проверить этот перенос в ascii режиме.
И к моему удивлению, у переноса есть свой код , который равен 10.
Прикрутим проверку в наш код, и допишем простенький сдвиг на один символ, при попадании на перенос строки.

-10

Проверяем :

-11

На этом можно остановиться.

Дальнейшее для тех, кто хочет чтобы печать текста останавливалась по клику мышкой, и выводился сразу весь текст.

Для этого заводим еще одну переменную, которая будет указывать на то, надо ли нам печатать текст или нет.
Я назвал её «do».

Прописываем инпут для мышки , и добавляем проверку в цикл печати. Из кода ниже я думаю вы всё поимете.

-12
-13

Надеюсь вам был полезен этот материал.
Подписывайтесь на канал,
вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !

#godot #gdscript #программирование #уроки #игровой движок