Материал из Скретч Вики
Отрисовка текста отображает текст на сцене в Скретче с большей гибкостью чем у блока сказать []
, но требует больше работы. Есть два основных подхода:
- Быстрое повторное использование блока
сказать []
, который создает стиль телетайпа в речевом пузыре. - Использование набора костюмов в спрайте для отображения изображений букв.
Отрисовка текста с помощью блока «Сказать»
Это простой процесс, требующий две переменные: (номер символа)
и (текст)
. Пользователю также нужно будет создать пользовательский блок:
определить отрисовать текст (строка) отрисовать текст []
Определение пользовательского блока
Ниже показан скрипт определения для пользовательского блока:
определить отрисовать текст (строка) задать [номер символа v] значение [1] задать [текст v] значение [] // Пока нет текста повторить (длина (строка)) раз // Говорим столько раз, сколько букв в строке задать [текст v] значение (объединить (текст) (буква (номер символа) в (строка))) сказать (текст) //Говорит то, что было сказано ранее, и новый символ изменить [номер символа v] на (1) // Переходим к следующему символу end
Не забудьте снять галочку «Запустить без обновления экрана», иначе текст не будет отображаться.
Также если проект воспроизведён в турбо-режиме, эффект телетайпа не будет отображаться, если нет ждать () секунд
или любой другой задержки в цикле.
Отрисовка текста с помощью спрайта
Примеры в данном разделе используют печать
. Вполне возможно получить такой же визуальный эффект созданием клонов: просто замените каждый блок для печати блоком создать клон [самого себя v]
. Однако, использование клонов имеет два недостатка:
- Проект будет более склонён к лагу.
- Максимальный лимит Скретча — 300 клонов.
Попытки рендеринга текста с помощью спрайтов могут привести к нежелательным результатам, если строка ввода содержит непредусмотренные символы.
Без чувствительности к регистру
Для начала получите или создайте 33 костюма для каждой буквы от А до Я. Убедитесь в том, что у каждого костюма название представляет собой соответствующую букву в нижнем регистре. Обычно является хорошей идеей иметь костюм для символа пробела. При загрузке файла для пробела в Ваш Скретч-проект не забудьте поменять название костюма на один пробел. Если необходимо использовать другие символы (например, знаки препинания и цифры), для каждого из них потребуется костюм, название которого совпадает с названием символа.
Пользовательский блок (см. ниже) обрабатывает данный текст, отрисовывая одну букву одновременно. Он берёт три параметра: (текст::custom-arg)
для рендеринга и (x текста::custom-arg)
и (y текста::custom-arg)
для определения позиции текста. Вполне безопасно и обычно желательно установить этот пользовательский блок на запуск без обновления экрана.
определить отрисовать текст (текст) в x: (x текста) y: (y текста) задать [прошлый x v] значение (положение x) // запомнить исходное положение спрайта задать [прошлый y v] значение (положение y) перейти в x: (x текста) y: (y текста) //переходим в позицию начала текста задать [буква v] значение [1] повторить (длина (текст)) раз изменить костюм на (буква (буква) в (текст)) печать // оставляем изображение этой буквы изменить x на (ширина буквы) //переходим в позицию следующей буквы изменить [буква v] на (1) end перейти в x: (прошлый x) y: (прошлый y) //возвращаемся в изначальное положение
Значение переменной (ширина буквы)
должно быть примерной шириной букв в пикселях (например, 15).
С чувствительностью к регистру
Для чувствительности к регистру см. Определение регистра перед этим руководством. Вам понадобятся костюмы из того руководства. Если понадобится использовать любые буквы/символы кроме от А до Я, им понадобится свои костюмы. Некоторые символы, которые было бы полезно добавить, включают: знаки препинания, цифры и другие.
Первый шаг — создать пользовательский блок и пройти сквозь каждую букву сообщения для рендеринга. Данный пользовательский блок будет принимать три параметра: (текст::custom-arg)
для рендеринга и (x текста::custom-arg)
и (y текста::custom-arg)
для определения позиции текста. Он также должен запускаться без обновления экрана.
Переменная (буква)
будет использоваться чтобы запомнить, на какую букву сейчас смотрят.
определить отрисовать текст (текст) в x: (x текста) y: (y текста) перейти в x: (x текста) y: (y текста) задать [буква v] значение [1] повторить (длина (текст)) раз изменить [буква v] на (1)
Затем переключитесь на соответствующий костюм с учётом регистра. О том, как это делается, читайте в руководстве про чувствительность к регистру. После обработки одной буквы переходите к следующей, увеличивая позицию x.
определить отрисовать текст (текст) в x: (x текста) y: (y текста) перейти в x: (x текста) y: (y текста) задать [буква v] значение [1] повторить (длина (текст)) раз изменить костюм на [нуль v] изменить костюм на (буква (буква) в (текст)) //если символ в нижнем регистре, то костюм останется на «нуль» если <(костюм #) = (1)> , то //если спрайт не сменил костюм из-за того, что символ в нижнем регистре изменить костюм на (объединить (буква (буква) в (текст)) [т]) // все костюмы в нижнем регистре заканчиваются на «т» end если <(костюм #) = (1)> , то // если спрайт до сих пор не сменил костюм . . . // есть пробел, символ без костюма или костюм с неправильным именем . . . // предположим, что это пробел иначе печать end изменить x на (10) // измените это число для увеличения пространства между буквами изменить [буква v] на (1)
Изменение ширины букв
Поскольку каждая буква (и символ) может иметь разную ширину, иногда необходимо учитывать это, чтобы избежать больших промежутков между буквами и перекрытия букв.
Для осуществления этого создайте список (ширины букв::list)
. Для каждого костюма введите его ширину (плюс один или два пикселя) в список. Убедитесь в том, что номер костюма соответствует с номером в списке!
Если есть костюм для пробела, то он тоже требует номер в списке. Добавьте в список ширину для пробела.
В скрипте для рендеринга текста замените:
изменить x на (10)
На:
изменить x на (элемент (костюм [номер v]) в [ширины букв v])
Для проверки правильности ширины всех букв полезно отрисовать все поддерживаемые буквы и символы.
Создание консоли
Иногда требуется преобразование списка в экранную консоль. Это полезно для игр в виде текстовых приключений или RPG, а также симуляций операционных систем.
Для начала создайте список для скрипта рендеринга ((консоль::list)
). Скрипт выше должен быть слегка модифицирован, чтобы он корректно работал:
перезагрузить экран определить перезагрузить экран повторять пока не <(длина списка [консоль v]) < [21]> удалить (1) из [консоль v] end задать [элемент списка v] значение [0] повторить (длина списка [консоль v]) раз изменить [элемент списка v] на (1) отрисовать текст (элемент (элемент списка) в [console v]) в y: (((0) - ((элемент списка) * (15))) + (175)) end определить отрисовать текст (текст) в y: (y текста) перейти в x: (-230) y: (y текста) задать [буква v] значение [1] повторить (длина (текст)) раз изменить костюм на [нуль v] изменить костюм на (буква (буква) в (текст)) //если символ в нижнем регистре, то костюм останется на «нуль» если <(костюм #) = (1)> , то //если спрайт не сменил костюм из-за того, что символ в нижнем регистре изменить костюм на (объединить (буква (буква) в (текст)) [т]) // все костюмы в нижнем регистре заканчиваются на «т» end если <(костюм #) = (1)> , то // если спрайт до сих пор не сменил костюм . . . // есть пробел, символ без костюма или костюм с неправильным именем . . . // предположим, что это пробел иначе печать end изменить x на (элемент (костюм [номер v]) в [ширины букв v]) изменить [буква v] на (1)
Этот сценарий удалит все лишние элементы в «консоли», чтобы текст поместился на экране. Не забудьте пометить галочку «Запуск без обновления экрана», иначе экран будет перезагружаться достаточно долго.
Для добавления элемента в консоли просто используйте блок добавить [] к [консоль v]
и блок перезагрузить экран::custom
для обновления консоли.
![]() |
Приведенный выше скрипт нуждается в постоянном обновлении. Можно также сделать скрипт, который обнаруживает изменения в списке «консоль», а затем обновляет экран. |