В этой небольшой статье соберем логику для печати текста.
Задача : Каждый раз когда в тексте попадается точка или запятая, печать должна приостанавливаться.
Пример :
Печатать будем в RichTextLabel, с использованием BBcode. Если вы не понимаете о чем речь, то советую почитать для начала вот эти статьи — раз, два.
Закидываем в сцену RichTextLabel. И подключаем на рут скрипт.
Начинаем писать код.
Для начала нам надо вынести текст который мы будем печатать в переменную.
Как можно заметить, в тексте присутствуют переносы строк (\n). Чуть позже мы к этому вернемся.
Пропишем основные моменты в ready().
Включение ББкода, установка текста из переменной, и сразу скинем видимость символов в ноль.
Далее займемся непосредственно фукцией печати. В ней мы будем брать длину текста, и стартовать цикл в котором будем «открывать» следующий символ строки.
Для того чтобы цикл не печатал всё и сразу, притормозим его при помощи yield().
Дописываем в ready() небольшую задержку , и старт нашей функции.
Результатом будет следующее:
Печать идет вполне себе правильно. Осталось добавить паузы.
Для этого добавим условие, в котором будем проверять текущий символ.
И если он равен точке или запятой, то делаем паузу в печати чуть больше чем обычно.
Проверяем:
Паузы появились… Но добавился какой то глюк.
Выше я писал что для переноса строк у нас используется «\n». И этот перенос строки считается годо как символ. Каждый раз при сносе строки, наш счетчик символов прибавляет один. Поэтому нам надо это отлавливать, и корректировать печать.
ДАЛЬНЕЙШЕЕ возможно не совсем правильно. Но , я не смог ничего лучше придумать )
Итак как отловить перенос строки ? Ведь это по сути не символ. Проверка на пробел ничего не дала, и я решил проверить этот перенос в ascii режиме.
И к моему удивлению, у переноса есть свой код , который равен 10.
Прикрутим проверку в наш код, и допишем простенький сдвиг на один символ, при попадании на перенос строки.
Проверяем :
На этом можно остановиться.
Дальнейшее для тех, кто хочет чтобы печать текста останавливалась по клику мышкой, и выводился сразу весь текст.
Для этого заводим еще одну переменную, которая будет указывать на то, надо ли нам печатать текст или нет.
Я назвал её «do».
Прописываем инпут для мышки , и добавляем проверку в цикл печати. Из кода ниже я думаю вы всё поимете.
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #программирование #уроки #игровой движок