Изображения, расположенные сбоку диалогового окна (Side Images)
Многие визуальные новеллы включают изображения говорящего персонажа как часть их интерфейса. Ren'Py называет такие изображения боковыми и поддерживает автоматический выбор и отображение таких изображения в рамках диалога.
Поддержка бокового изображения предполагает, что Character() объявлен со связанным тегом изображения:
define e = Character("Эйлин", image="eileen")
Когда говорит персонаж со связанным тегом изображения, Ren'Py создаёт пул атрибутов изображения. В этот пул добавляется связанный тег изображения, а также текущие атрибуты изображения, связанные с этим тегом.
Чтобы определить боковое изображение, связанное с тегом, Ren'Py пытается найти изображение с тегом side и наибольшим количеством атрибутов из пула. Если изображение не найдено или несколько изображений имеют одинаковое количество атрибутов, отображается значение Null.
Например, у нас есть следующий скрипт:
define e = Character("Эйлин", image="eileen")
image eileen happy = "eileen_happy.png"
image eileen concerned = "eileen_concerned.png"
image side eileen happy = "side_eileen_happy.png"
image side eileen = "side_eileen.png"
label start:
show eileen happy
e "Назовем эту линию Точкой A."
e concerned "А это Точка B."
В данном коде о точке А говорит персонаж е, связанный с тегом изображения "eileen". Отображается изображение "eileen happy", поэтому в пул атрибутов добавляется "eileen" и "happy". Мы ищем изображение с тегом "side" и как можно большим количеством этих атрибутов – и сопоставляем "side eileen happy", которое будет отображаться на боковом изображении Ren'Py.
В точке B отображается изображение "eileen concerned". Теперь пул атрибутов - "eileen" и "concerned". Единственным подходящее изображением – "side eileen", так что именно оно выбирается Ren'Py. Если бы в скрипте было изображение "side concerned", то это привело к двусмысленности, и тогда Ren'Py не отобразил бы изображение.
Скрытые персонажи (Invisible Characters)[править | править код]
Ещё один способ использования бокового изображения – отобразить изображение персонажа игрока, когда он говорит. Это можно сделать с помощью привязки изображения к персонажу, а затем использовать конструкцию say с атрибутами для выбора бокового изображения для отображения.
Например:
define p = Character("Игрок", image="player")
image side player happy = "side_player_happy.png"
image side player concerned = "side_player_concerned.png"
label start:
p happy "Это отображено с помощью изображения 'side player happy'."
p "Это также показано с помощью 'side player happy'."
p concerned "Это отображено с помощью 'side player concerned'."
Вариации (Variations)[править | править код]
Существует ряд атрибутов боковых изображений, которыми можно управлять с помощью переменных конфигурации.
define config.side_image_tag = None
- Если задана, то боковое изображение будет отслеживать заданный тег изображения, а не изображение, связанное с текущим говорящим персонажем. Например:
define e = Character("Эйлин", image="eileen") init python: config.side_image_tag = "eileen"
- Заставит боковое изображение отслеживать тег изображения "eileen", который связан с персонажем е.
define config.side_image_only_not_showing = False
- Если установлено значение True, боковое изображение будет отображаться только в том случае, если изображение с этим тегом ещё не отображается на экране.
define config.side_image_prefix_tag = 'side'
- Префикс, используемый при поиске бокового изображения.
define config.side_image_null = Null()
- Значение Null, которое можно использовать, когда боковое изображение не отображается. Изменяться, но только для других Null объектов. Одна из причин заключается в том, чтобы установить сторону Null (например, Null(width=200, height=150)) для предотвращения растворения из-за прерывания.
define config.side_image_same_transform = None
- Если принимает значение не None, преобразование, которое используется, когда новое боковое изображение использует тот же тег изображения, что и предыдущее боковое изображение.
define config.side_image_change_transform = None
- Если принимает значение не None, преобразование, которое используется, когда новое боковое изображение не разделяет имя тега изображения (или одно из новых или старых боковых изображений не существует).
Преобразования и переходы (Transforms and Transitions)[править | править код]
Преобразования config.side_image_same_transform и config.side_image_change_transform вызываются с двумя аргументами (old и new), когда боковое изображение отображается. Их можно использовать для перемещения по боковым изображениям или для перехода между боковыми изображениями.
Это заставляет боковое изображение выдвигаться и сдвигаться при изменении персонажа, связанного с этим изображением:
transform change_transform(old, new):
contains:
old
yalign 1.0
xpos 0.0 xanchor 0.0
linear 0.2 xanchor 1.0
contains:
new
yalign 1.0
xpos 0.0 xanchor 1.0
linear 0.2 xanchor 0.0
define config.side_image_change_transform = change_transform
Это используется для растворения между старыми и новыми боковыми изображениями, когда персонаж остаётся неизменным. Например, когда персонаж меняет эмоции. Для корректной работы Dissolve оба боковых изображения должны быть одного размера.
transform same_transform(old, new):
old
new with Dissolve(0.2, alpha=True)
define config.side_image_same_transform = same_transform
Пространство / Настройка (Leaving Room / Customization)[править | править код]
По умолчанию текст занимает всю ширину экрана. Если попытаетесь отобразить боковое изображение, оно выведется поверх текста. Чтобы это исправить, нужно добавить margin или padding на соответствующей стороне текстового окна:
style window:
left_padding 150
Положение бокового изображения можно изменить, настроив экраны say или nvl. Оба включают строку:
add SideImage() xalign 0.0 yalign 1.0
Изменяя свойства xalign и yalign, можно управлять расположением бокового изображения на экране.
Наконец, функция SideImage() возвращает в качестве отображаемого объекта текущее боковое изображение. Это можно использовать как часть более сложной настройки экрана.
Функции (Functions)[править | править код]
renpy.get_side_image(prefix_tag, image_tag=None, not_showing=None, layer=None)
- Пытается найти изображение, которое будет отображаться в качестве бокового изображения.
- Начинается с определения набора атрибутов изображения. Если задан image_tag, он получает атрибуты изображения из тега. Иначе он получает их от текущего показываемого персонажа.
- Затем он ищет изображение с тегом prefix_tag и этими атрибутами и возвращает его, если он существует.
- Если not_showing принимает значение True, то это возвращает боковое изображение только в том случае, если изображение, из которого взяты атрибуты, отсутствует на экране. Если принимает значение None, значение берется из config.side_image_only_not_showing.
- Если layer принимает значение None, для текущего отображаемого тега используется слой по умолчанию.
renpy.set_tag_attributes(name, layer=None)
- Устанавливает атрибуты, связанные с тегом изображения, когда этот тег изображения не отображается. Основное использование этого - прямая установка атрибутов, используемых боковым изображением.
- Например:
$ renpy.set_tag_attributes("lucy mad") $ renpy.say(l, "Я довольно сердита.")
- и
l mad "Я довольно сердита."
- эквивалентны.
Источник[править | править код]
Статья "Side Images" на английском языке.
На главную страницу | Официальная документация движка | Вернуться к началу статьи |