Текст (Text)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Ren'Py содержит несколько способов отображения текста. Операторы say и menu в первую очередь связаны с отображением текста пользователю. Пользовательский интерфейс часто содержит текст, отображаемый с помощью операторов языка экрана, таких как text, textbutton и label. Эти функции, наряду с другими, создают отображаемые объекты Text() и показывают их на экране.

Отображаемый объект Text отвечает за управление процессом показа текста пользователю. Отображаемый текст выполняет действия в следующем порядке:

  1. Перевод текста.
  2. Интерполяция данных в текст.
  3. Оформление текста с помощью стилей и текстовых тегов.
  4. Выкладка стилизованного текста.
  5. Графическое изображение текста на экране.

В данном разделе рассматривается процесс отображения текста в Ren'Py.

Управляющие символы (Escape Characters)[править | править код]

Есть три специальных символа, которые могут управлять способом отображения текста в Ren'Py. Разработчик должен знать об этих символах, чтобы их написание не было случайно неверно истолкована движком Ren'Py.

\
Символ обратной косой черты используется для ввода при написании строки Ren'Py или Python. Ниже представлены некоторые общие управляющие кодами:
\"
Вставляет двойные кавычки в строку, заключенную в двойные кавычки.
\'
Вставляет одинарную кавычку в строку, заключенную в одинарные кавычки.
\
Предусматривает дополнительное пространство в строке RenPy. По умолчанию текст скрипта Ren'Py объединяет расположенные рядом пробелы в один пробел.
\n
Включает символ разрыва строки в текст.
\\n
Включает символ обратной косой черты в текст.


[
Левая квадратная скобка используется для введения интерполяции значения в текст. Чтобы включить одну левую скобку в текст, удвойте её - напишите [[.


{
Левая фигурная скобка используется для введения текстового тега. Чтобы включить левую фигурную скобку в текст, удвойте её - напишите {{.

Интерполяции данных (Interpolating Data)[править | править код]

Ren'Py поддерживает интерполяцию данных в текстовой строке, прежде чем она отобразится на экране. Например, если имя игрока хранится в переменной playername, можно записать строку диалога так:

g "Добро пожаловать в институт Некомими, [playername]!"

Ren'Py интерполирует переменные, найденные в глобальном хранилище. Если на экране используется текстовый виджет, Ren'Py также интерполирует локальные переменные экрана. Это можно переопределить, указав явный аргумент scope для отображаемого объекта Text.

Ren'Py не ограничен интерполяцией простых переменных. Он также может интерполировать поля и компоненты кортежей. Так что возможно получить код как:

g "Моё имя [player.names[0]]."


Можно применить форматирование при отображении чисел. Этот код отобразит число с плавающей точкой и до двух знаков после запятой:

$ percent = 100.0 * points / max_points
g "Ты мне нравишься на [percent:.2] процент!"


Интерполяция строк Ren'Py взята из синтаксиса форматирования строки PEP 3101. Ren'Py использует [ для ведения форматирования строк, потому что { была использована текстовыми тегами.


Наряду с флагами преобразования !s и !r, поддерживаемыми Python, Ren'Py поддерживает ещё несколько флагов. Флаг преобразования !q обеспечивает, чтобы текстовые теги заключались в кавычки должным образом, для того чтобы при отображении строки не возникали нежелательные конструкции форматирования. Например:

g "Ты меня не проведешь, [playername!q]."

Флаг !t переведёт интерполированную строку:

if points > 5:
    $ mood = _("счастлив")
else:
    $ mood = _("раздражен")

g "Я [mood!t] встретиться с тобой."


Флаг !u переводит текст в верхний регистр, а флаг !l - в нижний регистр. Флаг !c действует только на первый символ, используя его заглавные буквы. Эти флаги могут быть объединены, например, !cl будет использовать заглавные буквы первого символа и приведёт к тому, что оставшийся текст будет в нижнем регистре.

Оформление и текстовые теги (Styling and Text Tags)[править | править код]

В Ren'Py текст получает информация о стиле двумя способами:

  • Из стиля, который применяется ко всему блоку текста. Дополнительную информацию смотрите в разделе «Стили», особенно в разделе о свойствах стиля текста.
  • Через текстовые теги. Текстовые теги подходят для стилизации части текстового блока или небольшой части текстовых блоков в программе. Если вы обнаружите, что начали применять одни и те же текстовых теги в каждой строке текста, рассмотрите возможность использования стиля.


Есть два типа текстовых тегов. Некоторые текстовые теги являются самозакрывающимися, в то время как другие требуют закрывающий тег. При использовании нескольких закрывающихся тегов, они должны быть закрыты предыдущим открытым тегом, сначала закрывается первый тег - Ren'Py отклонит некорректное вложение. Например:

# Это верная строка.
"Обычный {b}Жирный шрифт {i}Полужирный курсив{/i} Жирный шрифт{/b} Обычный"

# Это неправильная строка и её выполнение приведёт к ошибке или некорректному поведению
"Обычный {b}Жирный шрифт {i}Полужирный курсив{/b} Курсив{/i} Обычный"


Некоторые текстовые теги принимают аргумент. В этом случае за именем тега следует знак равенства (=) и аргумент. Аргумент не должен содержать символ правой фигурной скобки - }. Значение аргумента варьируется в зависимости от текстового тега.


◇ Общие текстовые теги[править | править код]

Теги, применяемые ко всему тексту:

a
Тег привязки создаёт гиперссылку, расположенную между самим тегом и его закрывающим тегом. Хотя поведение гиперссылки контролируется свойством стиля hyperlink_functions, обработчик по умолчанию имеет следующие поведение:
  • Когда аргумент начинается с jump:, остальная часть аргумента является меткой для перехода.
  • Когда аргумент начинается с call:, остальная часть аргумента является меткой для вызова. Как обычно, вызов завершает текущий оператор Ren'Py.
  • Когда аргумент начинается с call_in_new_context:, остальная часть аргумента является меткой для вызова в новом контексте (используя renpy.call_in_new_context()).
  • Иначе аргумент является URL-адресом, который открывается системным веб-браузером.
Если в аргументе нет раздела протокола, к нему добавляется config.hyperlink_protocol. Если для config.hyperlink_protocol установлено значение «jump», {a=label} и {a=jump:label} становятся эквивалентами. Разработчики могут определять новые протоколы, используя config.hyperlink_handlers.
label test:

    e "Почему бы вам не посетить {a=http://renpy.org} домашнюю страницу Ren'Py{/a}?"

    e "Или {a=jump:more_text} получить более подробную информацию здесь{/a}."

    return

label more_text:

    e "В Хот-Спрингс, штат Арканзас, есть статуя Аль Капоне, с которой вы можете сфотографироваться."

    e "Здесь больше информации, но не той, которую вы хотели узнать, не так ли?"

    return


alpha
Текстовый тег alpha отображает текст, расположенный между самим тегом и его закрывающим тегом, с указанной непрозрачностью. Непрозрачность должна иметь значение между 0.0 и 1.0, что соответствует полной прозрачности и полной непрозрачности, соответственно. Если значение начинается с префикса + или -, непрозрачность будет изменена на указанное число, а не полностью заменена. Если значение начинается с префикса *, непрозрачность будет умножена на это число.
"{alpha=0.1}Этот текст едва читаем!{/alpha}"
"{alpha=-0.1}Этот текст на 10 процентов прозрачнее, чем текст по умолчанию.{/alpha}"
"{alpha=*0.5}Этот текст наполовину такой же непрозрачный, как и по умолчанию.{/alpha}"


art
Альтернативный тег верхней аннотации руби помечает текст, расположенный между самим тегом и его закрывающим тегом, как альтернативный верхний текст руби. Смотрите раздел «Текст руби» для получения дополнительной информации.


b
Тег жирного шрифта выводит текст, расположенный между самим тегом и его закрывающим тегом, жирным шрифтом.
"Пример {b}текста, выделенного жирным шрифтом{/b}."


color
Текстовый тег color отображает текст, расположенный между самим тегом и его закрывающим тегом, в указанном цвете. Цвет должен быть в формате #rgb, #rgba, #rrggbb или #rrggbbaa.
"{color=#f00}Красный{/color}, {color=#00ff00}Зелёный{/color}, {color=#0000ffff}Синий{/color}"


cps
Тег символов в секунду задаёт скорость отображения текста для текста, расположенного между самим тегом и его закрывающим тегом. Если аргумент начинается со звездочки, он берётся как множитель для текущей скорости текста. Иначе аргумент задаёт скорость для появления текста на экране, в символах в секунду.
"{cps=20}Фиксированная скорость{/cps} {cps=*2}Удвоенная скорость{/cps}"


font
Тег font отображает текст, расположенный между самим тегом и его закрывающим тегом, указанным шрифтом. Аргумент – имя файла используемого шрифта.
"Попробуйте {font=mikachan.ttf}шрифт mikachan{/font}."


i
Тег курсива отображает текст, расположенный между самим тегом и его закрывающим тегом, курсивом.
"Посетите {i}Пизанскую башню{/i}."


image
Тег image – самозакрывающийся тег, который вставляет изображение в текст. Изображение должно соответствовать высоте одной строки текста. Аргументом должно быть либо имя файла изображения, либо имя изображения, определенного с помощью оператора image.
g "Рада тебя видеть! {image=heart.png}"


k
Тег кернинга – тег, регулирующий кернинг символов, расположенных между тегом и его закрывающим тегом. В качестве аргумента тег принимает число с плавающей точкой, содержащее количество пикселей кернинга, добавляемых к каждой паре кернинга. Число может быть отрицательным, чтобы уменьшить кернинг.
"{k=-.5}Отрицательный{/k} Нормальный {k=.5}Положительный{/k}"


outlinecolor
Текстовый тег outlinecolor изменяет все контуры (включая тени) на заданный цвет. Цвет должен быть в формате #rgb, #rgba, #rrggbb или #rrggbbaa.
"Давайте сделаем {outlinecolor=#00ff00}зелёный{/outlinecolor} контур."


plain
Тег plain гарантирует, что текст не будет выделен жирным шрифтом, курсивом, подчеркиванием или зачеркиванием.
"{b}Это жирный шрифт. {plain}А этот нет.{/plain} Это жирный шрифт.{/b}"


rb
Тег нижней аннотации руби помечает текст, расположенный между тегом и его закрывающим тегом, как нижний текст руби. Смотрите раздел «Текст руби» для получения дополнительной информации.


rt
Тег верхней аннотации руби помечает текст, расположенный между тегом и его закрывающим тегом, как верхний текст руби. Смотрите раздел «Текст руби» для получения дополнительной информации.


s
Тег зачеркивания проводит черту через текст, расположенный между тегом и его закрывающим тегом.
g "Рад {s}тебя видеть{/s}."


size
Тег size изменяет размер шрифта текста, расположенного между самим тегом и его закрывающим тегом. Аргументом должно быть целое число, по желанию с предшествующим + или -. Если аргумент является просто целым числом, размер устанавливается, как высота множества пикселей. Иначе размер увеличивается или уменьшается на эту величину.
"{size=+10}Больше{/size} {size=-10}Меньше{/size} {size=24}24 px{/size}."


space
Тег space – самозакрывающийся тег, который вставляет горизонтальное пространство в строку текста. В качестве аргумента он принимает целое число, содержащее количество пикселей для добавления пространства.
"Перед тегом space.{space=30}После добавления тега space."


u
Тег подчеркивания подчеркивает текст, расположенный между самим тегом и его закрывающим тегом.
g "Рада {u}видеть{/u} тебя."


vspace
Тег vspace – самозакрывающийся тег, который вставляет вертикальное пространство между строками текста. В качестве аргумента он принимает целое число, содержащее количество пикселей для добавления пространства.
"Строка 1{vspace=30}Строка 2"


#

Текстовые теги, начинающиеся с #, игнорируются Ren'Py, но могут быть включены, чтобы различать строки, предназначенные для перевода.
"Новый{#плейлист}"

◇ Текстовые теги диалога[править | править код]

Текстовые теги, применяемые только к диалогу:

fast
Если тег fast отображается в строке текста, то весь текст перед ним отображается мгновенно, даже в режиме замедления текста. Тег fast – самозакрывающийся тег.
g "Похоже, они{nw}"
show trebuchet
g "Похоже, они{fast} снова играют со своей катапультой."


nw
Тег с нулевым временем ожидания – самозакрывающийся тег, который заставляет текущую строку диалога автоматически прекратить себя после отображения конца строки.
g "Похоже, они{nw}"
show trebuchet
g "Похоже, они{fast} снова играют со своей катапультой."


p
Тег паузы абзаца – самозакрывающийся тег, который завершает текущий абзац и ожидает, когда пользователь нажмёт на кнопку для продолжения. Если для тега задан аргумент, аргумент интерпретируется как число и ожидание автоматически заканчивается, когда заданные секунды проходят.
"Строка 1{p}Строка 2{p=1.0}Строка 3"


w
Тег ожидание – самозакрывающийся тег, который ждёт, пока пользователь нажмёт на кнопку для продолжения. Если для тега задан аргумент, аргумент интерпретируется как число и ожидание автоматически заканчивается, когда заданные секунды проходят.
"Строка 1{w} Строка 1{w=1.0} Строка 1"


clear
Имеет смысл использовать текстовый тег clear только для отдельной строки в режиме монолога NVL-режима. Делает то же самое, что и оператор nvl clear, только без завершения блока текста.
"""
Блок 1 на странице 1.

Блок 2 на странице 2.

{clear}

Блок 1 на странице 2.

и т.п.
"""


Также возможно определить пользовательские текстовые теги с помощью языка Python.


◇ Стиль текстовых тегов[править | править код]

Ren'Py поддерживает текстовые теги, допускающие применение стилей. Речь идёт о текстовых тегах, в которых имя тега пусто. В этом случае аргументом считается имя стиля. Например, тег {=mystyle} получит доступ к стилю mystyle.

Текст между тегом и соответствующим закрывающим тегом имеет следующие свойства, определённые в стиле:

  • antialias
  • font
  • size
  • bold
  • italic
  • underline
  • strikethrough
  • color
  • black_color
  • kerning

Языки, отличные от английского (Non-English Languages)[править | править код]

Стандартный шрифт для Ren'Py содержит символы для английского языка и многих других языков. Из-за размера движок не содержит символы, необходимые для отображения других языков, включая китайский, японский и корейский. Для поддержки этих языков, проект должен сначала изменить используемые шрифты.


Ren'Py поддерживает большинство языков мира без дополнительной настройки. Тем не менее, корейский язык может записываться с или без интервалов между словами. Ren'Py имеет специальный режим для поддержки корейского языка с пробелами, который можно включить с помощью кода:

define gui.language = "korean-with-spaces"

В gui.rpy можно изменить "unicode", установленное по умолчанию.


В японском языке есть несколько правил для разрыва строки. Рекомендуем начать с "japanese-normal" и переходить к "japanese-loose" или "japanese-strict" для возможностей разрыва строки в той или иной степени, соответственно:

define gui.language = "japanese-loose"


Идеографические языки предоставляют большое количество возможностей для разрыва строки. Для того, чтобы задействовать более быстрый, но менее точный алгоритм разбиения строк, используйте код:

define gui.language = "greedy"

Более быстрый алгоритм разбиения строк не нужен, если игра не отображает огромного количество текста, как например в NVL-режиме.

Алгоритмы разрыва строки могут быть дополнительно настроены с помощью функции renpy.language_tailor().


◇ Вертикальный текст[править | править код]

Когда установлено свойство стиля vertical, Ren'Py выведет вертикально ориентированный текст. Текст пишется сверху вниз, справа налево.


Есть два текстовых тега, которые взаимодействуют с вертикальным текстом:

horiz
Включает горизонтально ориентированный текст внутри вертикального текста.
vert
Включает вертикально ориентированный текст внутри горизонтального текста. Не проворачивает текст в вертикальной ориентации.



Заметка: Если шрифт не содержит информацию о регулировании интервала вертикального текста, Ren'Py попытается синтезировать эту информацию из данных о горизонтальном тексте. Интервал может меняться между версиями Ren'Py.


◇ Текст руби[править | править код]

Текст руби (также известный как фуригана или подстрочные аннотации) – способ размещения небольшого текста над символом или словом. Есть несколько шагов, необходимых вашей игры для поддержки текста руби.

Во-первых, вы должны установить стили для текста руби. Требуются следующие изменения стиля:

  1. Необходимо использовать свойство line_leading, чтобы оставить достаточно вертикального пространства для текста руби.
  2. Должен быть создан новый именованный стиль. Свойства этого стиля, например size, должны быть установлены в соответствии с текстом руби.
  3. Следует установить yoffset для нового стиля, чтобы переместить текст руби выше базовой линии.
  4. Поле ruby_style стиля текста должно быть установлено на вновь создаваемом стиле.

Например:

style ruby_style is default:
    size 12
    yoffset -20

style say_dialogue:
    line_leading 12
    ruby_style style.ruby_style

(Для этой цели используйте style.style_name для ссылки на стиль).


После настройки Ren'Py, текст руби можно включить с помощью текстовых тегов {rt} и {rb}. Тег {rt} используется для обозначения одного или нескольких символов, который будут отображаться как текст руби. Если тексту руби предшествует текст, заключенный в тег {rb}, он центрируется над этим текстом. Иначе текст руби центрируется предыдущим символом. Например:

e "Руби можно использовать для фуриганы (東{rt}とう{/rt} 京{rt}きょう{/rt})."

e "Он также используется для переводов ({rb}東京{/rb}{rt}Tokyo{/rt})."


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


Ren'Py также поддерживает альтернативный текст руби, который является вторым видом текста верхней аннотации руби. Он вводится с текстовым тегом {art} (вместо {rt}), и свойством altruby_style (вместо ruby_style).

Шрифты (Fonts)[править | править код]

Ren'Py поддерживает шрифты и коллекции TrueType/OpenType, а также шрифты на основе изображений. Шрифт TrueType или OpenType задаётся путём указания имени файла шрифта. Файл должен присутствовать в директории игры или в одном из архивных файлов.

Ren'Py также поддерживает коллекции TrueType/OpenType, которые определяют более одного шрифта. При доступе к коллекции используйте индекс шрифта на основе 0, за которым следует @ и имя файла. Например, "0@font.ttc" является первым шрифтом в коллекции, "1@font.ttc" – вторым и так далее.


◇ Замена шрифта[править | править код]

Переменная config.font_replacement_map используется для сопоставления шрифтов. Сочетание имени файла шрифта, жирности и курсива сопоставляются с аналогичной комбинацией. Это позволяет использовать шрифт с правильным курсивом вместо автоматически сгенерированного курсива.

После такого сопоставления можно заменить версию курсивного шрифта Deja Vu Sans на официальную версию oblique (вам необходимо скачать шрифт Oblique из интернета):

init python:
    config.font_replacement_map["DejaVuSans.ttf", False, True] = ("DejaVuSans-Oblique.ttf", False, False)

Это сопоставление может улучшить внешний вид курсивного текста.


◇ Шрифты на основе изображений[править | править код]

Шрифты на основе изображений можно зарегистрировать, вызвав одну из следующих функций регистрации. Регистрация шрифта на основе изображения требует указать name, size, boldness, italicness и underline. Когда все эти свойства соответствуют зарегистрированному шрифту, он используется.


renpy.register_bmfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None)

Регистрирует BMFont с заданными деталями. Обратите внимание, что размер, жирный шрифт, курсив и подчеркивание являются рекомендательными параметрами (используется для сопоставления) и не изменяют внешний вид шрифта.
Пожалуйста, ознакомьтесь на домашней станицей BMFont с инструментом, который создаёт шрифты BMFont. Ren'Py ожидает, что параметр filename будет в файле в текстовом формате BMFont, который описывает 32-битный шрифт. Альфа-канал должен содержать информацию о шрифте, в то время как Красный, Зеленый и Синий каналы должны быть установлены в один канал. Файлы изображений, кернинг и другая контрольная информация считываются из файла BMFont.
Рекомендуем включить латинский язык и общую пунктуацию, как часть вашего BMFont, чтобы обеспечить отображение всего интерфейса Ren'Py.
name
Имя регистрируемого шрифта, последовательность символов.
size
Размер регистрируемого шрифта, целое число.
bold
Жирность регистрируемого шрифта, логическое значение.
italics
Курсивность регистрируемого шрифта, логическое значение.
underline
Параметр игнорируется.
filename
Файл, содержащий контрольную информацию BMFont.


renpy.register_mudgefont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, xml=None, spacewidth=10, default_kern=0, kerns={})

Регистрирует MudgeFont с заданными деталями. Обратите внимание, что размер, жирный шрифт, курсив и подчеркивание являются рекомендательными параметрами (используется для сопоставления) и не изменяют внешний вид шрифта.
Пожалуйста, ознакомьтесь на домашней станицей MudgeFont с инструментом, который создаёт шрифты MudgeFonts. Ren'Py предполагает, что символьные коды, находящиеся в XML-файле MudgeFont, представляют собой номера символов Юникода и игнорирует отрицательные символьные коды.
name
Имя регистрируемого шрифта, последовательность символов.
size
Размер регистрируемого шрифта, целое число.
bold
Жирность регистрируемого шрифта, логическое значение.
italics
Курсивность регистрируемого шрифта, логическое значение.
underline
Параметр игнорируется.
filename
Файл, содержащий изображения MudgeFont, последовательность символов. Изображение, как правило, представляет собой файл в формате TGA, но это может быть PNG или другой формат, поддерживаемый Ren'Py.
xml
XML-файл, содержащий информацию, сгенерированную инструментом MudgeFont.
spacewidth
Ширина пробела, целое число в пикселях.
default_kern
Интервал керна между символами по умолчанию, в пикселях.
kerns
Сопоставление из двухсимвольных строк в керне, которое следует использовать между этими символами.


renpy.register_sfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, spacewidth=10, baseline=None, default_kern=0, kerns={}, charset=u'!"#$%&'()*+, -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')

Регистрирует SFont с заданными деталями. Обратите внимание, что размер, жирный шрифт, курсив и подчеркивание являются рекомендательными параметрами (используется для сопоставления) и не изменяют внешний вид шрифта.
Более подробную информацию о SFont можно найти здесь.
name
Имя регистрируемого шрифта, последовательность символов.
size
Размер регистрируемого шрифта, целое число.
bold
Жирность регистрируемого шрифта, логическое значение.
italics
Курсивность регистрируемого шрифта, логическое значение.
underline
Параметр игнорируется.
filename
Файл, содержащий изображение Sfont, последовательность символов.
spacewidth
Ширина пробела, целое число в пикселях.
default_kern
Интервал керна между символами по умолчанию, в пикселях.
kerns
Сопоставление из двухсимвольных строк в керне, которое следует использовать между этими символами.
charset
Набор символов шрифта. Строка, содержащая символы в том порядке, в котором они находятся на изображении. Набор символов по умолчанию для SFont:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~


Поскольку BMFont является наиболее полным из трёх форматов графических шрифтов, поддерживаемых Ren'Py, он рекомендуется для новых проектов. Пример использования BMFont:

init python:
    renpy.register_bmfont("bmfont", 22, filename="bmfont.fnt")

define ebf = Character('Эйлин', what_font="bmfont", what_size=22)

label demo_bmfont:

    ebf "Наконец, Ren'Py поддерживает BMFonts."


◇ Группы шрифтов[править | править код]

При создании многоязычной игры может оказаться невозможным найти единый шрифт, охватывающий каждую систему письменности, используемую игрой, во время проектирования атмосферы, предполагаемой разработчиком. Для обеспечения этого Ren'Py поддерживает группы шрифта, которые могут брать символы из двух или более шрифтов и объединить их в один шрифт.

Чтобы создать группу шрифтов, создайте объект FontGroup и вызовите для него метод .add один или несколько раз. Объект FontGroup может использоваться везде, где можно использовать название шрифта. Метод add берёт начало и конец диапазона символьных точек в Unicode и использует первый диапазон для охвата точки.

Например:

style default:
     font FontGroup().add("english.ttf", 0x0020, 0x007f).add("japanese.ttf", 0x0000, 0xffff)


FontGroup()
Группа шрифтов, которые могут использоваться в качестве единого шрифта.
add(font, start, end)
Связывает диапазон символов со шрифтом.
start
Начало диапазона. Это может быть односимвольная строка или целое число, задающее кодовую точку Unicode. Если принимает значение None, шрифт используется по умолчанию.
end
Конец диапазона. Это может быть односимвольная строка или целое число, задающее кодовую точку Unicode.


Когда несколько вызовов .add() включают один и тот же символ, первый вызов имеет приоритет.
Это возвращает FontGroup, так что несколько вызовов .add() могут быть объединены между собой.

Текст, как отображаемые объекты (Text Displayables)[править | править код]

Текст также может использоваться в качестве отображаемого объекта, что позволяет применять преобразования к тексту, отображая его как изображение и перемещая по экрану.


ParameterizedText(style='default', **properties)
Отображаемый объект, который можно показать с помощью дополнительного строкового параметра, который затем показывает эту строку, как если бы она была изображением. Это обычно используется как часть заранее определенного изображения text.
Например, можно сделать:
show text "Привет, мир" at truecenter
with dissolve
pause 1
hide text
with dissolve
Вы можете использовать ParameterizedText непосредственно для определения похожих изображений с различными свойствами стиля. Например, можно прописать в коде:
image top_text = ParameterizedText(xalign=0.5, yalign=0.0)


Text(text, slow=None, scope=None, substitute=None, slow_done=None, **properties)
Отображаемый объект, отображающий текст на экране.
text
Текст для отображения на экране. Это может быть строка или список строк и отображаемых объектов.
slow
Определяет, медленно ли отображается текст, набираемый по одному символу за раз. Если принимает значение None, режим медленного выведения текста определяется свойством стиля slow_cps. Иначе, истинностное значение этого параметра определяет, будет ли использован режим медленного выведения текста на экран.
scope
Если принимает значение не None, это должен быть словарь, который предоставляет дополнительную область для интерполяции текста.
substitute
Если принимает значение True, происходит интерполяция текста. Если принимает значение False, то интерполяция не произойдет. Если принимает значение None, они контролируются config.new_substitutions.

Функции текстовой утилиты (Text Utility Functions)[править | править код]

renpy.filter_text_tags(s, allow=None, deny=None)
Возвращает копию s с отфильтрованными текстовыми тегами. Необходимо задать один из именованных аргументов allow и deny.
allow
Набор тегов, которые разрешены. Если тега нет в этом списке, он удаляется.
deny
Набор тегов, которые запрещены. Если тега нет в этом списке, он сохраняется в строке.


renpy.transform_text(s, function)
Преобразует s, оставляя текстовые теги и интерполяцию одинаковыми.
function
Функция, которая вызывается со строками, соответствующими фрагментам текста, и должна возвращать вторую строку, которая заменяет этот фрагмент текста.
init python:
    def upper(s):
        return s.upper()

$ upper = renpy.transform_text("{b}Не Upper{/b}")

Особенности замедленного выведения текста (Slow Text Concerns)[править | править код]

Ren'Py позволяет разработчику или пользователю указать, что текст должен выводиться на экран медленно. В этом случае Ren'Py отобразит текст в текстуре, а затем нарисует прямоугольники из текстуры на экран.

К сожалению, это означает, что возможно получить артефакты рендеринга при перекрытии символов. Чтобы свести к минимуму эти артефакты рендеринга, убедитесь, что свойства line_leading и line_spacing достаточно велики, чтобы линии не перекрывались. Если нижняя часть символов в первой строке обрезана, особенно если line_spacing отрицателен, рассмотрите возможность увеличения line_overlap_split.

Горизонтальные артефакты также возможны, когда символы объединены в керн, но эти артефакты менее серьезны, так как они существуют только для одного кадра.

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


◇ Регистрация текста, вышедшего за границы[править | править код]

Ren'Py может зарегистрировать случаи, когда текст выходит за пределы области, отведенной для него. Чтобы включить ведение журнала переполнения текста, необходимо выполнить следующие действия:

  1. Установить для переменной config.debug_text_overflow значение True.
  2. Установить свойства стиля xmaximum и ymaximum для отображаемого текста, либо для контейнера, который его содержит.
  3. Запустить игру.

Всякий раз, когда отображается текст, который выходит за пределы доступной области, RenPy регистрирует ошибку в файле text_overflow.txt.

Источник[править | править код]

Статья "Text" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи