& (Сборка строки, например, «Ваш счет:» & Score)
Также есть операторы сравнения =, <>, <, <=,>,> = для сравнивания значений. Они возвращают 1, если сравнение true (истинно), или 0, если false (ложно).
& также подразумевается как логическое «И» и «|» является логическим оператором ИЛИ. Они полезны в сочетании с операторами сравнивания, например, score <0 | health<0, что также возвращает 1, если истинно и 0, если ложно.
?: это тернарный оператор, который позволяет проверить условия в выражениях. Это особенно полезно при использовании операторов сравнивания и логических операторов. Он принимает форму — состояние ? результат_если_истинна : результат_если_ложно
например здоровье <0 | счёт <0? «Игра окончена!» : «Продолжить!».
(condition ? result_if_true : result_if_false e.g. health < 0 | score < 0 ? «Game over!» : «Keep going!».)
Условие считается истинным, если оно не равно нулю, и ложно, если оно равно нулю.
Строки(текст)
Текст в программировании известный как строки, и Construct 2 тоже иногда использует эти именования. Текст в выражениях должен быть окружён двойными кавычками, например, «Hello!».
Двойные кавычки — это не часть текста, поэтому, выражение «Hello» будет показанно как Hello, без всяких двойных кавычек. Чтобы использовать двойные кавычки в тексте, необходимо поставить две двойных кавычки рядом друг с другом («»), например, «Он сказал «»Привет»»мне» вернёт — Он сказал «привет» мне.
Вы можете использовать & для создания строки из текста и цифр, например, «Ваша оценка:»& Score.
Стандартные математические выражения
Полный список выражений можно найти в самой Construct 2: дважды щелкните на объект System в плавающей панели выражения, когда Вы печатаете там. Однако некоторые из них перечислены здесь.
sin (синус угла в градусах)
cos (косинус угла в градусах)
tan (тангенс угла в градусах)
asin (арксинус, возвращает градусы)
acos (арккосинус, возвращает градусы)
atan (арктангенс, возвращает градусы)
sqrt (квадратный корень)
abs (абсолютное значение)
exp (экспонента, е ^ х)
ln (логарифм по основанию е)
log10 (логарифм по основанию 10)
Не стоит забывать, что Construct 2 всегда использует градусы, а не радианы. Если вам нужен угол, то в Construct 2 это будет в градусах.
Преобразование выражений
int(x) — преобразовывает х в целое значение
float(x) — преобразовывает х в число с плавающей запятой
str(x) — преобразовывает х в строку
Не забывайте использовать & для создания строк, т.е. «Ваш счёт: » & score вернёт «Ваш счёт: 10» в виде строки, если score=10.
Другие выражения
Angle(x1, y1, x2, y2) — Вернёт угол в градусах между (x1, y1) и (x2, y2), используя atan2(y2 — y1, x2 — x1).
Ceil(число) — Округление числа вверх, например, ceil(6.1) возвращает 7.
Distance(x1, y1, x2, y2) — Вернёт расстояние между (x1, y1) и (x2, y2).
dt — Delta-time. Смотри Delta-time and framerate independence.
Floor(число) — Округление числа вниз floor(6.7) вернёт 6.
fps — Частота кадров за секунду.
len(x) — Вернёт длину строки x
Lerp(a, b, x) — Линейная интерполяция: высчитываетaет а + x(b — a), или линейно интерполируя a в пункт b на x%. То есть, lerp(a, b, 0.25) даст 25% от значения пути А к В.
LoopIndex — Текущий (top-level) индекс цикла.
LoopIndex(«имя») — Индекс цикла от цикла имя
ObjectCount — Общее количество экземпляров объекта в игре.
Max(a, b [,c,…]) — Даст максимальное из заданных значений. Вы можете задать любое количество значений
Min(a, b [,c,…]) — Даст минимальное из заданных значений. Вы можете задать любое количество значений
Newline — разбиение текстовой строки «Hello» & newline & «World»
Random(N) — Вернёт случайное число от 0 до N, не включая N. В результат входят и дробные, так что random(3) вполне может вернуть 2.5. Используйте floor(random(n)) для генерации целого случайного числа, например floor(random(3))* вернёт или 1, или 2, или 0. Выражение Random(A, B) может быть использовано для получения случайного числа между А и В.
Round(value) — Округляет число к ближайшему целому Round(6.8) даст 7
Scrollx, Scrolly — Текущая позиция скролинга
Timescale — Временная шкала. Смотри Delta-time and framerate independence.
Time — Время в секундах от начала игры.
TickCount — Количество тиков? от начала игры.
Не забывайте проверять выражения в панели Construct 2 для получения более полного списка.
Полезные выражения в других объектах
Mouse и Touch позволяют передавать параметры слоя для X и Y выражений. Это очень полезно, масштабировании и повороте слоёв.
Например Mouse.X («Layer 1») возвращает X-позицию мыши на слое 1, чтобы высчитать параллакс этого же слоя, а так же масштаб и угол. Если вы используете только Mouse.X, то он не примет во внимание параллакс, масштаб или угол, так что результат может быть непредсказуемым.
Объект индексирования в выражениях
Добавив 0 индекс, вы получите нулевую по счёту копию объекта из всех существующих.
Например Sprite(0).X получает позицию по Х первой копии объекта, и Sprite(1).X получает положение по Х второй копии. Также, можно передавать и другие выражения для индекса. Отрицательные числа начинаются с противоположного конца, поэтому Sprite(-1).X получает позицию по Х последнего спрайта.
Всё это может быть применено к любому объекту, а не только к спрайтам.
Construct 2: Лекция первая — Fa_losophy / Блоги
Всем доброго времени суток. Выбросите к черту ваши тетради и ручки. Скачивайте отсюда наш основной инструмент — Scirra Construct 2. На момент написания урока актуальная и стабильная версия, используемая при обучении — r178. В течение нашего первого и очень надеюсь — не единственного курса по созданию игр это будет нашим основным многофункциональным инструментом. Для удобства повестования я буду сокращать название движка до С2.
Установка программы не вызовет никаких трудностей у опытных пользователей ПК, поэтому описывать этот процесс я не буду. Как только вы установили программу, организуйте у себя на диске рабочее пространство под проекты — как правило, в процессе разработки появляется куча временных и не очень файлов, которые эргономичнее хранить в одном месте.
Запускайте программу. Перед вами откроется вот такой вид.
Тут ничего не доступно, поэтому давайте начнем уже наконец-то. Создаем проект — для этого можно:
- Нажать Ctrl+N
- Попсово зайти в FILE — Create New Project
Откроется окно:
Для любознательных здесь можно сделать перерыв, так как в этом окне — кладезь всякой интересной демонстрационной всячины и различных заготовок, показывающих возможности движка. Но продолжим. Нас интересует самый первый пункт — он выделен синим — New empty project. Нажав на кнопку Open мы создадим совершенно пустой проект, что собственно и написано было в дескрипшене. В результате мы увидим вот это:
Вот теперь давайте пробежимся по всему что мы видим, чтобы не боятся этого. Начнем сверху — Панель инструментов
Во вкладке HOME расположены достаточно простые инструменты управления процессом — первые три секции в принципе не юзабельны так как для представленных там операций использются общеизвестные хоткеи. Четвертая секция —
Шестая вкладка — Preview — это уже более юзабельный раздел. Тут расположена кнопка превью сцены (Run layout), дебаг сцены (Debug layout) и экспорт проекта. Обратите внимание — в левом верхнем углу есть маленьгкие аналоги представленных функций.
Седьмая вкладка с единственной функцией — открывает стартовую страницу в редакторе сцены.
Кстати о редакторе сцены.
Это белое поле и есть редактор сцены — тут то мы и будем в дальнейшем расставлять игровые объекты и всячески визуализировать нашу игру.
Ключевой момент в редакторе сцены — это вкладки вверху. Сейчас там мы видим надпись Layout 1 и Event Sheet 1 — соответсвенно Сцена 1 и Листинг событий 1. В первом мы «рисуем», во второй — создаем игровую механику.Уровни строятся по принципу «Одна сцена — Один листинг», но при этом в листинг может быть подключено сколько угодно других листингов — об этом мы поговорим позже. С редакотором сцены на этом можно закончить.
Едем дальше — смотрим направо. Здесь у нас два блока, и первый из них — Инспектор проекта (Это не самое удачное название, но суть оно не меняет).
Инспектор проекта — это иерархическая структура вашего проекта, браузер объектов если хотите. Сразу обратим внимание на две закладки — Projects и Layers. В первой закладке отображаются все открытые в данный момент проекты. Во второй — отображаются все слои выбранной в данный момент сцены. Чуть позже я покажу логику работы с этим, там ничего сложного. Сейчас у открыт Новый проект в браузере проектов, и там несколько папок: Layouts (сцены), Event sheets (Листинги событий), Objects types (объекты игры), Families (семьи), Sound (звуки), Music (музыка), Files (подключаемые файлы игры).
Layouts (сцены)
Здесь хранятся все сцены проекта. Создать новую сцену можно двумя способами — продублировать существующую через нажатие на ней ПКМ, или же создав новую через нажатие на папке со сценами ПКМ. При создании новой сцены С2 спросит вас о необходимости создать под сцену свой листинг — можно создавать, но иногда в этом нет необходимости. Для удобства вы можете создать подпапки — к примеру если игра подразумевает несколько различных групп сцен. Открыть сцену можно через двойное нажатие на ней ЛКМ, при этом открытие каждой новой сцены не закроет предыдущую в редакторе сцен.
Event sheets (Листинги событий)
Objects types (объекты игры)
В папке хранятся все объекты игры, или если переводить дословно — типы объектов. По опыту скажу что здесь создание подпапок — скорее необходимость, чем просто доступная возможность. Как правило в процессе разработки игры появляется большое количество объектов и лучше хранить их упорядоченно по смыслу, чем просто по алфавиту. Создать новый объект проще через редактор сцены — там это делается двойным кликом на сцене, но и в браузере проектов это тоже можно сделать — через нажатие ПКМ на папке объектов.
Families(семьи)
Здесь хранятся так называемые «семьи» объектов. Добавить новую семью можно через ПКМ — Add new family. Редактировать — тоже через ПКМ — Edit. Семья в С2 — это группа объектов, для которых можно назначить какую либо одну общую характеристику, например поведение или эффект. Это очеь удобно хотя бы потому, что позволяет экономить события в листинге. К примеру нам нужно сделать так, что при попадании ракеты во все объекты на карте происходит взрыв. Вместо того, чтобы прописывать события столкновения ракеты с каждым объектом на карте (а их порой может быть не один десяток), мы просто собираем все эти объекты в Семью и делаем одно событие столкновение ракеты с семьей. Кроме того — один объект может находиться в нескольких семьях одновременно, и при этом к нему можно будет обратиться в действиях как к одному самостоятельному объекту.
Sounds/Music (Звуки/Музыка)
Тут все просто — в этих папках хранятся звуки и музыка игры. Добавляются они через ПКМ — Import Sounds, Import Music. Рекомендуется использовать для звуков формат ogg и mp3 для музыки. При импорте С2 сам производит конвертацию в несколько музыкальных форматов, но лучше удалять все неиспользуемые и оставлять только mp3 и ogg. Это значительно снизит вес игры, что немаловажно для игр, разрабатываемых под браузер и мобильные платформы.
Files (подгружаемые файлы)
Эта папка хранит все подгружаемые файлы проекта, не относящиеся напрямую к игре. Сейчас там можно увидеть папку с иконками – при необходимости их можно все заменить на свои с сохранением размеров.
Теперь переключим закладку с Projects на Layers — и попадем в инспектор слоёв выбранной сцены. Выбранная сцена – это сцена, выделенная двойным нажатием по ней в редакторе сцены, так как нажатие на сцену в инспекторе не делает её активной, а только выделяет её название.
Сейчас у нас есть один слой – Layer 0. Если нажать на жирный плюс – то будет создан новый слой, он будет располагаться в списке НАД существующим. Чтобы поменять их местами используются жирные стрелки. «Глаз» сейчас находится в нажатом состоянии – значит слой виден. Еще одно нажатие на глаз (или на галочку возле названия слоя) – спрячет слой. Карандаш позволяет переименовать слой. Мусорный бак соответственно удалит слой. Ничего сложно и страшного, попробуйте. А теперь нажмите на слое ПКМ.
Еще один важный момент в работе со слоями. У каждого слоя есть порядковый номер, и считаются слои, начиная от 0. Это не опасно и никак не вредит работе, но это стоит иметь ввиду, так как в дальнейшем мы будем создавать объекты на слоях и будет не очень хорошо, если у нас к примеру ракета окажется на слое с параллаксом. 0_0
Теперь ниже – у нас там располагается Инспектор объектов и Карта тайлов.
С инспектором объектов вопросов особых трудностей не возникнет даже у новичков – это просто браузер объектов сцены. Через ПКМ мы можем сделать известные уже нам операции, на некоторых из которых мы подробнее остановимся позже. А вот Карта тайлов это уже кое-что серьезное, и на ней мы подробно остановимся в заключительной части нашего урока.
Едем дальше – переводим глаза в другую сторону и видим блок Properties — Настроек. Мыслим глобально – это панель настроек вообще всего, что можно настроить в С2.
Мы не будем сейчас останавливаться на каждом пункте настроек ввиду нецелесообразности. Большинство пунктов понятно всем, кто изучал в первых классах английский, остальные – мы со всеми с ними столкнемся в процессе обучения и разберем. Сейчас незачем забивать голову лишней информацией. Потому что хочется делать уже игры, а не карпеть над скучными основами.
Сделаем простой финт ушами и переключимся с Редактора сцена на Редактор Событий. Это наш «подвал» игры — здесь мы будем по крупицам выстраивать механику всех взаимодействий.
Сейчас у нас тут пусто и дескрипшн рекомендует нажать ПКМ для начала работы с листингом. Важный но очевидный нюанс — действия в С2 выполняются каждый тик последовательно, начиная сверху и дальше вниз по листингу, поэтому сначала уничтожать объект, а потом на его месте ставить другой не получится. Еще один важный момент — тик — минимальная единица времени в С2, примерно равная 0,016 секунде. С такой скоростью в идеале будет выполняться листинг событий игры. Это важный момент, касающийся вопросов оптимизации игры, которые мы будем постепенно рассматривать в дальнейшем, и возможно — посвятим какой-то урок.
Итак мы в редакторе событий. Руководствуясь советами текста на экране, жмем ПКМ и видим меню, как на скрине. Идем по пунктам:
Add event
Создает новое событие, за которым последует действие.
Add comment
Создает над выделенным событием комментарий — идеально в качестве разграничителя действий и напоминаний.
Add group
Создает группу, в которую потом можно занести события. Аналог папки для файлов. При этом группы можно включать и отключать в процессе игры, что позволяет оптимизировать нагрузку на процессор (актуально для мобильных платформ)
Add global variable
Создает глобальную переменную. Такая переменная хранит информацию «через всю игру» — т.е. обратиться к ней можно из любого листинга любой сцены.
Include event sheet
Подключает уже созданный листинг событий. Незаменимая вещь, позволяющая в разы ускорить работу приложения ввиду отстутвия необходимости дублировать действия для каджого уровня. К примеру можно создать листинг отвечающий за генерацию уровня, листинг с движениями персонажа, и листинг с НПС, и потом подключать их на каждом уровне. А в листингах уровня выстраивать локальные механики.
Важно понимать, что действия в листинге имеют иерархическую структуру, и от того, как события будут расположены на листинге, так они в результате и будут считаны в игре, поэтому нужно с самого начала привыкать внимательно следить за построением иерархии листинга.
Text object — Construct 2 Documentation
Объект Text может отображать текст с помощью шрифта в вашей игре. Обратите внимание, что не так много шрифтов, общих для всех компьютеров, см. на этой странице некоторые распространенные веб-шрифты. Кроме того, объект Text поддерживает веб-шрифты с помощью действия Set web font . Дополнительные сведения см. в руководстве по использованию веб-шрифтов в текстовом объекте.
Объект Text ничего не отображает, если его ограничивающий прямоугольник слишком мал для размещения одной буквы текста. Если текстовые объекты становятся невидимыми, попробуйте увеличить их размер.
Рендеринг текста
Различные браузеры отображают текст по-разному, и представление макета Construct 2 также отображает текст иначе, чем в других браузерах. Это означает, что вы должны ожидать, что внешний вид объекта Text будет немного различаться в разных браузерах.
Вам следует протестировать игру в различных браузерах, чтобы текстовые объекты отображались так, как вы хотите, для всех пользователей. Дополнительные сведения см. в разделе Лучшие практики.
Неподдерживаемые шрифты в редакторе
По техническим причинам некоторые шрифты не поддерживаются визуализатором текста Construct 2. Это влияет только на редактор и не обязательно означает, что шрифт не будет работать в браузере — обязательно протестируйте его в разных браузерах. Чтобы гарантировать, что шрифт, который вы используете, доступен всем, вместо этого рекомендуется использовать веб-шрифты.
Свойства текста
- Текст
- Первоначально отображаемый текст объекта.
- Начальная видимость
- Будет ли объект отображаться (видимым) или скрытым (невидимым) при запуске макета.
- Шрифт
- Шрифт, который текстовый объект использует для отображения своего текста. Нажмите кнопку « … » справа от имени шрифта, чтобы открыть диалоговое окно выбора шрифта. Выбранные таким образом шрифты должны быть установлены на компьютер пользователя для корректного отображения. По этой причине рекомендуется использовать веб-шрифты, если вы выбираете необычный шрифт.
- Цвет
- Выберите цвет текста текстового объекта.
- Горизонтальное выравнивание
- Выберите, будет ли текст отображать по левому краю , по центру или по правому краю , выровненный по ограничивающему прямоугольнику.
- Вертикальное выравнивание
- Выберите, будет ли текст отображать сверху , по центру или снизу , выровненный по ограничивающему прямоугольнику.
- Точка доступа
- Выберите положение активной точки (или источника) объекта относительно его невращающегося ограничивающего прямоугольника.
- Упаковка
- Выберите способ переноса текста в конце строки. Word будет переносить целые слова, разделенные пробелами или дефисами. Символ будет переноситься на следующую строку любого символа, что может разделить слова пополам в западных языках, но больше подходит для других языков, таких как китайский.
- Высота строки
- Величина изменения расстояния между каждой строкой текста в пикселях. Используйте 0 для количества по умолчанию, -5 для 5 пикселей короче, чем по умолчанию, 10 для 10 пикселей выше, чем по умолчанию, и так далее.
Текстовые условия
Условия, общие для других объектов, см. в общих условиях.
- Сравнить текст
- Проверить, отображает ли текстовый объект в данный момент определенную строку текста. Сравнение может быть либо чувствительным к регистру («ТЕКСТ» отличается от «текста»), либо нечувствительным к регистру («ТЕКСТ» считается таким же, как «текст»). Чтобы проверить, является ли текстовый объект , а не , показывающим текст, инвертируйте условие.
Текстовые действия
О действиях, общих для других объектов, см. общие действия.
- Установить цвет шрифта
- Установить цвет текста. Используйте выражение в форме rgb(red, green, blue) .
- Установить начертание шрифта
- Измените шрифт, используемый для отображения текста. Шрифт должен быть установлен на компьютере пользователя для правильного отображения. По этой причине рекомендуется использовать веб-шрифты, если вы выбираете необычный шрифт.
- Установить размер шрифта
- Установите размер текста в пунктах (pt).
- Установить веб-шрифт
- Установите в качестве шрифта веб-шрифт, загруженный онлайн. Дополнительные сведения см. в руководстве Использование веб-шрифтов в текстовом объекте.
- Добавить текст
- Добавить текст в конец текущего текста. Например, если текстовый объект содержит Hello и к нему добавлено World , текстовый объект будет содержать HelloWorld .
- Установить текст
- Установите текст, который в данный момент отображает объект. Используйте 9Оператор 0003 и для объединения текста и чисел. Дополнительные сведения см. в разделе выражения.
Текстовые выражения
Выражения, общие для других объектов, см. в разделе общие выражения.
- Текст
- Возвращает строку, содержащую текущий текст объекта.
- Ширина текста
- Высота текста
- Возвращает размер фактического текстового содержимого в пределах прямоугольника текстового объекта. Обратите внимание, что объект Text должен быть нарисован до того, как он получит правильные значения. Если вы установите текст, а затем немедленно получите доступ к этим выражениям, они еще не будут иметь правильного значения. Добавление действия «Подождите 0,1 секунды» обычно решает эту проблему.
Построить 2 Руководство Construct.net 2020-06-08 2020-06-11
Конструктор 2: Обучение набору текста и переносу слов
Всем нравится этот эффект набора текста в ролевой игре, когда диалоги вашей игры пишутся в текстовом поле буква за буквой, а не появляются все одним куском. Однако это может вызвать конфликты с переносом слов в текстовом объекте.
Это ошибка, которую я вижу во многих инди-играх — визуальная ошибка, из-за которой текст начинает печататься поперек поля, но затем перенос слов происходит в середине слова, и все последнее слово строки «прыгает». ‘ до строчки ниже. Выглядит так:
Это довольно отвратительно — вы бы никогда не увидели, что такое происходит в Zelda или Final Fantasy , не так ли? Несколько лет назад я опубликовал решение на форуме Construct 2 , которое с тех пор было удалено, но время от времени я продолжал получать вопросы о нем, поэтому я подумал, что не пожалею времени, чтобы написать полное объяснение.
Мое решение предполагает, что вы будете использовать шрифт SpriteFont, а не плагин простого текста (который в любом случае ужасен для игр из-за возможных несоответствий рендеринга и шрифтов на компьютере пользователя), и работает, обрабатывая ваш текст для автоматической вставки разрывов строк каждый раз. x символов, прежде чем он будет отображен на экране. Это лучше всего работает для моноширинных шрифтов с одинаковой шириной символов.
Причина в том, что вам необходимо знать, сколько символов разрешено в строке. Первый шаг — дать вашему SpriteFont переменную экземпляра с именем charsPerLine. Здесь мы укажем игровому движку, какой длины должна быть каждая строка — у меня это было 39 символов. В моем примере мой SpriteFont называется MainSpritefont.
Если в вашей игре не используется моноширинный шрифт и ширина всех символов разная, вы все равно можете использовать этот метод, но вам нужно определить, сколько символов является хорошим эмпирическим правилом для вашего шрифта — возможно путем подсчета количества символов в строке, содержащей много букв M и W (обычно это самые широкие буквы в большинстве шрифтов). Рассчитав наихудший сценарий, вы можете получить хорошее ограничение на количество символов.
My
Construct 2 Печатный текст с переносом словСледующая система использует поведение набора текста Rex, которое доступно здесь. По сути, мое решение разбивает вашу строку на отдельные слова, а затем собирает ее, проверяя каждое слово и подсчитывая символы, чтобы увидеть, не делает ли это строку слишком длинной.
Прежде всего, вам нужно создать глобальную переменную с именем textToProcess. Сюда мы поместим исходный, необработанный текст.
Это функция:
Я собираюсь вдаваться в подробности и объяснять, как и почему это работает, но вы можете просто воспроизвести это как есть, чтобы создать такой же эффект в своей игре.
Если вам интересно понять, как это работает… читайте дальше!
Как работает эта функция?
Во-первых, есть три локальных переменных — Assembler, charsToIgnore и whatIndex.
- Ассемблер — это место, где функция будет собирать законченную обработанную строку во время выполнения.
- charsToIgnore необходим, поскольку функции необходимо знать, сколько символов содержится в текущей строке обрабатываемого текста. Однако len() вернет только 90 193 полной длины 90 194 текста, собранного на данный момент. Поэтому каждый раз, когда мы заканчиваем строку и вставляем разрыв строки, мы добавляем это количество символов к этой переменной, заставляя систему игнорировать символы в ранее завершенных строках.
- whatIndex необходим, потому что функция перемещается по тексту слово за словом, оценивая, требуется ли разрыв строки — эта переменная просто отслеживает, на каком слове она находится в данный момент.
После этого мы создаем функцию processNewLines(). Это позволяет нам легко вызывать весь этот блок событий во время игры всякий раз, когда мы хотим вызвать эффект переноса слов при наборе текста.
Объяснение цикла while
Первое подсобытие функции устанавливает цикл While, который разбивает вашу строку на отдельные слова с помощью tokencount(). Цикл while — это концепция программирования, означающая, что в то время как определенное условие или набор условий верны, код будет повторять снова и снова, пока не станет неверным.
Жетоны невероятно полезны в Construct 2 , они позволяют разбить строку на части, используя любой понравившийся символ в качестве разделителя. Таким образом, tokencount(textToProcess,» «) разбивает вашу строку на токены каждый раз, когда встречается с пробелом, а затем подсчитывает их, давая нам подсчет количества слов в вашей строке.
Например, «Это пример всем!» делится на «Это», «есть», «пример», «все!» и считается как пять токенов. Цикл While проверяет, превышает ли количество слов значение переменной whatIndex или равно ему. Поскольку whatIndex будет увеличиваться каждый раз, когда функция проверяет слово, весь этот цикл While в основном означает: , в то время как общее количество слов в строке больше или равно индексу слова, на котором мы находимся, — например, если есть девять слов, и мы находимся на пятом слове, цикл while сохраняется как true и выполняются дальнейшие подсобытия. Если оно ложно, это означает, что все слова были обработаны и цикл завершился.
Теперь мы подошли к следующему подсобытию с самым сложным условием из всех:
len(Assembler)-charsToIgnore+len(tokenat(textToProcess,whatIndex,» «)) ≤ MainSpritefont.charsPerLine
Обещаю, это не так страшно, как кажется! Разберем по частям:
- len(Ассемблер) — сколько символов на данный момент в собранном, обработанном тексте.
- charsToIgnore — мы рассмотрели это ранее (это количество символов в завершенных строках в обрабатываемом тексте, которое мы не хотим учитывать).
- len(tokenat(textToProcess,whatIndex,» «)) — выглядит сложно, но он просто подсчитывает символы в текущем слове в вашей строке. Если бы мы были на третьем слове строки из пяти слов «Мне очень нравятся зеленые бананы», мы бы получили слово «нравится», и поэтому количество символов будет равно 4.
- MainSpritefont.charsPerLine — мы рассмотрели это ранее, также — это максимальное количество символов в строке, которое мы выбрали для вашего SpriteFont.
Таким образом, на простом английском языке это условие буквально означает: Если длина собранной на данный момент строки минус любые символы в уже обработанных строках плюс длина символа текущего слова в строке меньше или равна символу Ограничение SpriteFont на строку …
В еще более простой формулировке мы проверяем количество символов данного слова в строке, чтобы увидеть, можем ли мы добавить его в текущую строку, не перебирая наш символ. лимит . Это все, что он делает. Затем, если это условие истинно, события просто добавляют слово к обработанному выходу в ассемблере и увеличивают счетчик whatIndex на 1, что позволяет нам перейти к следующему слову и продолжить цикл Пока.
Все еще со мной? Становится легче, обещаю…
Далее у нас есть условие Else. Это означает, что если предыдущее условие было , а не истинным, вместо этого система выполняет эти события. В данном конкретном случае это означает, что «текущее слово может , а не , можно добавить к собранной строке без превышения лимита символов на строку». что строка станет слишком длинной, и нам нужно вставить разрыв строки в конце ассемблера, чтобы заставить эффект переноса слов вести себя правильно.Это делается через системное выражение перевода строки.
Далее мы должны сообщить нашей функции что символы строки, которую мы только что закончили, больше не должны считаться — эта строка закончена, и мы можем двигаться дальше, для этого мы устанавливаем значение charsToIgnore в текущее количество символов Ассемблера через len(Assembler
Остальные действия, запускаемые условием Else, идентичны предыдущим и просто запускают процесс построения новой строки заново.
После цикла
Теперь мы подошли к этому условию:
tokencount(textToProcess,» «) < whatIndex
Это условие проверяет, обработали ли мы все слова. Когда количество слов нашего начального textToProcess меньше, чем количество слов, которые функция пыталась обработать, вся операция завершена — каждое доступное слово было оценено.