Экраны и язык экрана (Screens and Screen Language)

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

То, что видит пользователь при взгляде на игру Ren'Py, можно разделить на изображения и пользовательский интерфейс. Изображения отображаются игроку с помощью операторов scene, show и hide и обычно являются частью рассказываемой истории. Все остальное, что видит пользователь, является частью пользовательского интерфейса, который настраивается с помощью экранов.


Экраны могут отображаться четырьмя способами:

  • Неявно, когда выполняются операторы скрипта. Например, оператор say вызовет отображение экрана say.
  • Автоматически. Например, Ren'Py отобразит экран main_menu, когда он начнёт работать, или когда игрок вернётся в главное меню.
  • Как действие, связанное с кнопкой, кнопкой мыши или клавишей клавиатуры. По умолчанию экран save отображается, когда игрок щелкает правой кнопкой мыши или нажимает клавишу Esc. Также можно определить на экране кнопку, которая показывает экран save.
  • Явно, используя операторы, которые вызывают отображение экранов.


Одновременно может быть показано несколько экранов.


Экраны имеют две основные функции:

Отображают информации игроку. Информация может отображаться с помощью текста, панелей и изображений. Некоторая информация, отображаемая таким образом, жизненно важна для игрового процесса. Например, экран say используется для отображения диалога с пользователем, включая имя персонажа и то, что он говорит.
Позволяет пользователю взаимодействовать с игрой. Кнопки и панели позволяют пользователю вызывать действия и корректировать значения. Ren'Py включает множество предопределенных действий, позволяющих игроку продвигать игру, управлять настройками, загружать и сохранять игры и вызывать многие другие действия. Разработчик игры также может написать новые действия на Python.


Экраны обновляются в начале каждого взаимодействия и при каждом перезапуске взаимодействия.

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

Экран имеет связанную с ним область действия, дающую значения некоторым переменным. Когда к переменной обращается экран, она сначала просматривается в области действия, а затем просматривается как глобальная переменная.

Язык экрана (Screen Language)[править | править код]

Язык экрана использует в основном описательный способ отображения экранов. Он состоит из оператора, объявляющего новый экран, операторов, добавляющих отображаемые объекты на этот экран, и операторов управления.

Вот пример экрана:

screen say(who, what):
    window id "window":
        vbox:
            spacing 10

            text who id "who"
            text what id "what"

Первая строка – оператор screen, который используется для объявления экрана. В приведенном примере экрану присвоено название say, так что это экран, который используется для отображения диалога между персонажами. Он принимает два параметра: "who" и "what".

Оператор screen содержит окно, которому присвоен идентификатор "window". Это окно содержит вертикальный блочный элемент, а интервал внутри этого блока составляет 10 пикселей. Также оно содержит два текстовых поля, одно из которых содержит имя говорящего персонажа, а другое - его идентификатор.


◇ Синтаксис языка экрана[править | править код]

Большинство операторов языка экрана имеют общий синтаксис (некоторые операторы управления имеют другой синтаксис). Оператор начинается в начале строки с ключевого слова, которое объявляет оператор.

Если оператор принимает параметры, они сразу следуют за ключевым словом. Параметры представляют собой разделенные пробелами простые выражения, если не указано иное.

За позиционными параметрами следует список свойств. Свойство состоит из имени свойства, за которым следует значение этого свойства. Значения свойства являются простыми выражениями, если не указано иное. Список свойств представляет собой разделенный пробелами список этих свойств.

Если оператор заканчивается двоеточием, то он создаёт блок. Каждая строка в блоке может быть одной из следующих составляющих:

  • Список свойств.
  • Оператор языка экрана.


◇ Оператор screen[править | править код]

Оператор screen представляет собой оператор языка скриптов Ren'Py, который используется для объявления нового экрана. Он обрабатывается с использованием общего синтаксиса языка экрана.

Оператор принимает только один параметр - имя экрана. Параметр является именем, а не выражением. Он принимает следующие свойства:

modal
Если принимает значение True, экран является модальным. Модальный экран не позволяет пользователю взаимодействовать с отображаемыми под ним объектами, кроме стандартной раскладки клавиатуры.
sensitive
Выражение, которое определяет, является ли экран чувствительным к нажатию или нет. Это выражение оценивается как минимум один раз за взаимодействие.
tag
Анализируется как имя, а не как выражение. Указывает тег, связанный с этим экраном. Отображение экрана заменяет другие экраны с таким же тегом. Можно использовать для обеспечения одновременного отображения только одного экрана меню в одном и том же контексте.
zorder
Позволяет контролировать, насколько близко к игроку отображается экран. Чем больше число, тем ближе экран отображается к игроку. По умолчанию равен 0.
variant
Если присутствует, это должна быть строка или список строк, дающих вариант экрана, который будет определен. Смотрите «Варианты экрана».
style_prefix
Строка, используемая для предоставления префикса стиля для дочерних элементов этого экрана, как описано ниже.
layer
Строка с именем слоя, на котором отображается экран по умолчанию.
screen hello_world():
     tag example
     zorder 1
     modal False

     text "Привет, мир."

Экран может принимать список параметров:

screen center_text(s, size=42):
     text s size size

Операторы пользовательского интерфейса (User Interface Statements)[править | править код]

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

Все операторы пользовательского интерфейса имеют следующие общие свойства:

at
Это может быть преобразование, или список преобразований, или анонимное преобразование (преобразование, которое определяется непосредственно в at).
transform hello_t:
    align (0.7, 0.5) alpha 0.0
    linear 0.5 alpha 1.0

screen hello_title():
    text "Привет." at hello_t
    text "Привет.":
        at transform:
            align (0.2, 0.5) alpha 0.0
            linear 0.5 alpha 1.0
Преобразование используется для упаковки этого отображаемого объекта. Внешние события show, hide, replace и replaced передаются преобразованию тогда и только тогда, когда оно добавляется непосредственно на экран.
Например, если vbox упакован в преобразование и добавлен непосредственно на экран, то события передаются в это преобразование. Но если преобразование охватывает textbutton, который добавляется в vbox, это второе преобразование не содержит событий.
default_focus
Если задано и принимает значение True, отображаемый объект фокусируется по умолчанию. Когда несколько отображаемых объектов имеют это свойство, значения сравниваются, и отображаемый объект с наибольшим фокусом по умолчанию становится значением по умолчанию.
id
Идентификатор оператора пользовательского интерфейса. При отображении экрана можно указать значения свойств для отображаемых объектов с заданным идентификатором. Для некоторых экранов потребуется создать отображаемый объект с заданным идентификатором.
По умолчанию id создаётся автоматически.
style
Строка, задающая имя стиля, примененного к этому отображаемому объекту. Стиль задаёт значения по умолчанию для свойств стиля.
style_prefix
Предоставляет префикс для стиля этого отображаемого объекта и всех его дочерних элементов, если только эти дочерние элементы не имеют более определенного стиля или набора префиксов стилей.
Имя стиля создается путем объединения префикса стиля, подчеркивания и суффикса стиля. Суффикс стиля либо задается с помощью style_suffix, либо определяется отображаемым объектом.
Например, если vbox имеет префикс стиля "pref", vbox будет присвоен стиль "pref_vbox". Если не задан более конкретный стиль или префикс стиля, кнопка внутри vbox будет иметь стиль "pref_button".
Стили, доступные таким образом, создаются автоматически, если стиль не существует. Установка префикса None удаляет префикс из этого отображаемого объекта и его дочерних элементов.
style_group
Псевдоним style_prefix, используемый в более старых версиях Ren'Py.
style_suffix
Задает суффикс, который объединяется с style_prefix для создания имени стиля. Если это "small_button" и префикс стиля "pref", используется стиль "pref_small_button".
Если префикс стиля не используется, он используется непосредственно в качестве имени стиля. Суффикс стиля применяется только к одному отображаемому объекту, а не к отображаемому объекту и всем дочерним элементам.
focus
Принимает строку или целое число и задаёт имя отображаемому объекту для целей фокусировки. Ren'Py ищет структурное сходство между именами фокуса, когда выбирает отображаемый объект для фокусировки в начале взаимодействия. Если блочному элементу присваивается имя фокуса, а третья кнопка в этом блоке фокусируется в конце взаимодействия, то третья кнопка блочного элемента с таким же именем будет выделена в начале следующего взаимодействия.
tooltip
Назначает всплывающую подсказку для этого отображаемого объекта. Когда отображаемый объект приобретает фокус, значение этого свойства будет доступно из функции GetTooltip(). Дополнительные сведения смотрите в разделе «Всплывающие подсказки».
Объекты, передаваемые во всплывающую подсказку, должны поддерживать равенство. Если равенство не поддерживается, может возникнуть бесконечный цикл.
arguments
Кортеж или список, содержащий дополнительные позиционные аргументы, которые задаются отображаемому объекту.
properties
Словарь, содержащий дополнительные свойства, заданные отображаемому объекту.


Многие операторы пользовательского интерфейса принимают классы свойств стиля или свойства преобразования. Эти свойства могут иметь связанный с ними префикс стиля, который определяет, когда они применяются. Например, если тексту присвоено свойство hover_size, оно задаёт размер текста при наведении на него.

Операторы пользовательского интерфейса принимают спецификатор as, которое принимает имя переменной без каких-либо кавычек. Отображаемый объект, созданный оператором, присваивается переменной. Пример можно найти в разделе про перетаскивание.


◇ Оператор add[править | править код]

Добавляет изображение или другой отображаемый объект на экран. Дополнительно принимает свойства преобразования. Если задано хотя бы одно свойство преобразования, то создаётся Transform для упаковки изображения, и свойства передаются преобразованию.

Если отображаемый объект принимает значение None, на экран ничего не добавляется.

Не принимает никаких дочерних элементов.

screen add_test():
    add "logo.png" xalign 1.0 yalign 0.0


◇ Оператор bar[править | править код]

Создаёт горизонтально ориентированную панель, которая может использоваться для просмотра или корректировки данных. Принимает следующие свойства:

value
Текущее значение панели. Может быть либо объектом значения панели, либо число.
range
Максимальное значение панели. Необходимо, если value является числом.
adjustment
Объект ui.adjustment(), который корректирует эта панель.
changed
Если задано, то это должна быть функция Python. Функция вызывается со значением корректировки при изменении настройки.
hovered
Действие, выполняемое, когда панель получает фокус.
unhovered
Действие, выполняемое, когда панель теряет фокус.


Одно из свойств value или adjustment должно быть задано. Кроме того, эта функция принимает следующие свойства:

Не принимает дочерние элементы.

screen volume_controls():
    frame:
        has vbox

        bar value Preference("sound volume")
        bar value Preference("music volume")
        bar value Preference("voice volume")


◇ Оператор button[править | править код]

Создаёт область экрана, которую можно активировать для выполнения действия. Кнопка принимает не параметры, а следующие свойства:

action
Действие, выполняемое при активации кнопки. Кнопка активируется, если игрок щелкнул по ней кнопкой мыши, либо если он выбрал эту кнопку и нажал на клавиатуре клавишу Enter. Также определяет, является ли кнопка чувствительной, если свойство sensitive не предоставляется, и если кнопка выбрана, если свойство selected не предоставляется.
alternate
Действие, выполняемое, если кнопка активирована другим способом. Альтернативная активация происходит, когда игрок щелкает правой кнопкой мыши по кнопке на платформе, основанной на мыши, или когда игрок долго нажимает кнопку на сенсорной платформе.
hovered
Действие, выполняемое, когда кнопка находится в фокусе.
unhovered
Действие, выполняемое, когда кнопка теряет фокус.
selected
Выражение, определяющее, выбрана кнопка или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения выбранности.
sensitive
Выражение, определяющее, является ли кнопка чувствительной или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения чувствительности кнопки.
keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает действие этой кнопки.
alternate_keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает альтернативное действие этой кнопки.


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

Требует один дочерний элемент. Если задано ноль, два или более дочерних элементов, они неявно добавляются к оператору fixed, который добавляется к кнопке.


◇ Оператор fixed[править | править код]

Создаёт область, в которую можно добавить дочерние элементы. По умолчанию расширяется, чтобы заполнить доступную область, но свойства xmaximum и ymaximum могут изменить это.

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


Оператор fixed принимает не параметры, а следующие группы свойств:

При этом берётся любое количество дочерних элементов, которые добавляются к оператору fixed.


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

screen ask_are_you_sure:
    fixed:
         text "Вы уверены?" xalign 0.5 yalign 0.3
         textbutton "Да" xalign 0.33 yalign 0.5 action Return(True)
         textbutton "Нет" xalign 0.66 yalign 0.5 action Return(False)


◇ Оператор frame[править | править код]

Фрейм – окно, содержащее фон, предназначенный для отображения элементов пользовательского интерфейса, таких как кнопки, панели и текст. Оно принимает следующие группы свойств:

Требуется один дочерний элемент. Если задано ноль, два или более дочерних элементов, то для их хранения создаётся фиксированный элемент.

screen test_frame():
    frame:
        xpadding 10
        ypadding 10
        xalign 0.5
        yalign 0.5

        vbox:
            text "Режим экрана"
            null height 10
            textbutton "Полноэкранный" action Preference("display", "fullscreen")
            textbutton "Оконный" action Preference("display", "window")


◇ Оператор grid[править | править код]

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

Принимает два параметра. Первый – количество столбцов в сетке, а второй – количество строк в сетке. Принимает следующее свойство:

transpose
Если принимает значение False (по умолчанию) строки заполняются перед столбцами. Если принимает значение True, то столбцы заполняются перед строками.


Также принимает:


Должны быть заданы (столбцы * строки) дочерние элементы. Если задать оператору grid другое количество дочерних элементов, то это приведёт к ошибке.

screen grid_test:
     grid 2 3:
         text "Верхний левый"
         text "Верхний правый"

         text "В центре слева"
         text "В центре справа"

         text "Нижний левый"
         text "Нижний правый"


◇ Оператор hbox[править | править код]

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


Отображаемые дочерние элементы пользовательского интерфейса добавляются в блочный элемент.

screen hbox_text():
    hbox:
         text "Слева"
         text "Справа"

◇ Оператор imagebutton[править | править код]

Создаёт кнопку, состоящую из изображений, которые изменяют состояние при наведении на них курсора. Принимает не параметры, а следующие свойства:

auto
Используется для автоматического определения изображений, используемых этой кнопкой. Должна быть строка, содержащая %s. Если это так, и одно из свойств изображения опущено, %s заменяется именем этого свойства, а значение используется по умолчанию для этого свойства.
Например, если auto равен "button_%s.png", а значение idle опущено, то значение idle по умолчанию "button_idle.png". Аналогично, если auto равен button %s", используется изображение button idle.
Поведение auto можно настроить, изменив config.imagemap_auto_function.
insensitive
Изображение, используемое, когда кнопка нечувствительна.
idle
Изображение, используемое, когда кнопка не сфокусирована.
hover
Изображение, используемое при фокусировке кнопки.
selected_idle
Изображение, используемое, когда кнопка выбрана и находится в режиме ожидания.
selected_hover
Изображение, используемое, когда кнопка выбрана и наведена.
action
Действие, выполняемое при активации кнопки. Также определяет, является ли кнопка чувствительной, если свойство sensitive не предоставляется, и если кнопка выбрана, если свойство selected не предоставляется.
alternate
Действие, выполняемое, если кнопка активирована другим способом. Альтернативная активация происходит, когда игрок щелкает правой кнопкой мыши по кнопке на платформе, основанной на мыши, или когда игрок долго нажимает кнопку на сенсорной платформе.
hovered
Действие, выполняемое, когда кнопка находится в фокусе.
unhovered
Действие, выполняемое, когда кнопка теряет фокус.
selected
Выражение, определяющее, выбрана кнопка или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения выбранности.
sensitive
Выражение, определяющее, является ли кнопка чувствительной или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения чувствительности кнопки.
keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает действие этой кнопки.
alternate_keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает альтернативное действие этой кнопки.


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

Не принимает дочерние элементы.

screen gui_game_menu():
     vbox xalign 1.0 yalign 1.0:
          imagebutton auto "save_%s.png" action ShowMenu('save')
          imagebutton auto "prefs_%s.png" action ShowMenu('preferences')
          imagebutton auto "skip_%s.png" action Skip()
          imagebutton auto "afm_%s.png" action Preference("auto-forward mode", "toggle")


◇ Оператор input[править | править код]

Создаёт область ввода текста, которая позволяет игроку вводить текст. Когда игрок нажимает возврат, текст будет возвращён взаимодействием. Когда экран вызывается через call screen, результат будет помещен в переменную _return.

Принимает не параметры, а следующие свойства:

value
Объект входного значения, используемый этим вводом. Объекты InputValue определяют, откуда берётся значение по умолчанию, что происходит при изменении текста, что происходит при нажатии клавиши Enter и является ли текст редактируемым по умолчанию.
Не должен быть задан одновременно с default и changed.
default
Текст по умолчанию в этом вводе.
length
Максимальная длина вводимой строки.
pixel_width
Максимальная ширина пикселей ввода. Если ввод символа приведёт к превышению этой ширины ввода, нажатие клавиши игнорируется.
allow
Строка, содержащая символы, которые можно вводить. По умолчанию разрешены все символы.
exclude
Строка, содержащая символы, которые запрещены для ввода. По умолчанию "{}".
copypaste
Если принимает значение True, становится возможным скопировать и вставить текст. По умолчанию отключено.
prefix
Неизменяемая строка для добавления к тому, что ввёл игрок.
suffix
Неизменяемая строка для добавления в конец к тому, что ввёл игрок.
changed
Функция в Python, которая вызывается с тем, что игрок ввёл, когда строка изменяется.


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

Не принимает никаких дочерних элементов.

screen input_screen():
    window:
        has vbox

        text "Введите своё имя."
        input default "Джозеф П. Блоу, ESQ."


◇ Оператор key[править | править код]

Создаёт привязку клавиш, которая выполняет действие при нажатии клавиши. Клавиша используется здесь в свободном смысле, так как она также позволяет использовать джойстик и мышь.

Принимает один позиционный параметр, строку, дающую клавишу для привязки. Для описания доступных клавиш смотри раздел «Настройка раскладки клавиатуры».

action
Задаёт действие, которое выполняется при нажатии клавиши. Это свойство обязательно.


Не принимает никаких дочерних элементов.

screen keymap_screen():
    key "game_menu" action ShowMenu('save')
    key "p" action ShowMenu('preferences')
    key "s" action Screenshot()


◇ Оператор label[править | править код]

Создает окно в стиле метки, а затем помещает текст в это окно. Вместе эта комбинация используется для обозначения элементов внутри фрейма.

Принимает один позиционный аргумент, текст метки. Принимает следующие свойства:

text_style
Название стиля, используемого для текста кнопки. Если не указано, а свойство style является строкой, то к этой строке добавляется _text, чтобы задать стиль текста по умолчанию.
text_-
Другие свойства с префиксом text лишаются этого префикса, а затем передаются в отображаемый текст.


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

Не принимает никаких дочерних элементов.

screen display_preference():
    frame:
        has vbox

        label "Режим экрана"
        textbutton "Полноэкранный" action Preference("display", "fullscreen")
        textbutton "Оконный" action Preference("display", "window")


◇ Оператор mousearea[править | править код]

Область мыши – область экрана, которая может реагировать на вход или выход мыши. В отличие от кнопки, область мыши не фокусируется, поэтому можно иметь область мыши с кнопками внутри. Принимает не параметры, а следующие свойства:

hovered
Действие, которое выполняется, когда мышь входит в область мыши.
unhovered
Действие, которое выполняется, когда мышь покидает область мыши.
focus_mask
Свойство стиля focus_mask, которое может быть Displayable или значением None. Если отображаемый объект, область мыши будет отображаться, только если мышь находится над непрозрачной частью отображаемой области. Отображаемый объект не отображается игроку.


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

Не принимает никаких дочерних элементов.


Обычно оператору mousearea присваивается свойство стиля area, которое управляет размером и положением области мыши. Без какого-либо способа управления его размером область мыши будет занимать весь экран, что было бы менее полезным поведением.


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

screen button_overlay():
    mousearea:
        area (0, 0, 1.0, 100)
        hovered Show("buttons", transition=dissolve)
        unhovered Hide("buttons", transition=dissolve)

screen buttons():
    hbox:
        textbutton "Сохранить" action ShowMenu("save")
        textbutton "Настройки" action ShowMenu("preferences")
        textbutton "Пропуск" action Skip()
        textbutton "Авто" action Preference("auto-forward", "toggle")

label start:
    show screen button_overlay


◇ Оператор null[править | править код]

Оператор null вставляет пустую область на экран. Это может быть использовано для размещения элементов в пространстве. Принимает не параметры, а следующие свойства:

width
Ширина пустой области в пикселях.
height
Высота пустой области в пикселях.


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

Не принимает никаких дочерних элементов.

screen text_box():
    vbox:
         text "Название"
         null height 20
         text "Это основной текст."


◇ Оператор side[править | править код]

Позиционирует отображаемые объекты в углах или центре сетки. Принимает один параметр – строку, содержащую разделенный пробелами список мест для размещения своих дочерних элементов. Каждый компонент этого списка должен быть одним из:

'c', 't', 'b', 'l', 'r', 'tl', 'tr', 'bl', 'br'

'c' означает центр, 't' вверху, 'tl' вверху слева, 'br' внизу справа и так далее.

Принимает следующие свойства:

spacing
Расстояние между строками и столбцами сетки.


Принимает следующие группы свойств:


При рендеринге сначала измеряются углы, затем стороны, затем центр. Углы и стороны отображаются с доступной областью 0, поэтому может потребоваться предоставить им минимальный размер (с использованием xminimum или yminimum), чтобы они вообще отображались. Порядок размещения дочерних элементов управляется сверху вниз при их добавлении (т.е. также в порядке подстрок в аргументе), причем последние будут самыми высокими. Это может быть отключено config.keep_side_render_order.

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

screen side_test():
     side "c tl br":
          text "Центр"
          text "Верхний левый"
          text "Внизу справа"


◇ Оператор text[править | править код]

Оператор text отображает текст. Принимает один параметр – текст для отображения. Также принимает следующие группы свойств:

Не принимает дочерние элементы.

screen hello_world():
    text "Привет, мир." size 40


◇ Оператор textbutton[править | править код]

Создаёт кнопку, содержащую текстовую метку. Кнопка принимает один параметр – текст, который будет включен как часть кнопки. Принимает следующие свойства:

action
Действие, выполняемое при активации кнопки. Также определяет, является ли кнопка чувствительной, если свойство sensitive не предоставляется, и если кнопка выбрана, если свойство selected не предоставляется.
alternate
Действие, выполняемое, если кнопка активирована другим способом. Альтернативная активация происходит, когда игрок щелкает правой кнопкой мыши по кнопке на платформе, основанной на мыши, или когда игрок долго нажимает кнопку на сенсорной платформе.
hovered
Действие, выполняемое, когда кнопка находится в фокусе.
unhovered
Действие, выполняемое, когда кнопка теряет фокус.
selected
Выражение, определяющее, выбрана кнопка или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения выбранности.
sensitive
Выражение, определяющее, является ли кнопка чувствительной или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения чувствительности кнопки.
keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает действие этой кнопки.
alternate_keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает альтернативное действие этой кнопки.
text_style
Название стиля, используемого для текста кнопки. Если не указано, а свойство style является строкой, то к этой строке добавляется _text, чтобы задать стиль текста по умолчанию.
text_-
Другие свойства с префиксом text лишаются этого префикса, а затем передаются в отображаемый текст.


Также принимает:

Не принимает дочерние элементы.

screen textbutton_screen():
    vbox:
        textbutton "Вино" action Jump("wine")
        textbutton "Женщина" action Jump("women")
        textbutton "Песня" action Jump("song")


◇ Оператор timer[править | править код]

Создает таймер, который запускает действие, когда заканчивается время. Принимает один позиционный параметр, задающий время ожидания в секундах. Принимает свойства:

action
Задаёт действие, которое запускается по истечении таймера. Это свойство обязательно.
repeat
Если принимает значение True, таймер повторяется после истечения времени ожидания.


Не принимает дочерние элементы.

screen timer_test():
    vbox:
         textbutton "Да." action Jump("yes")
         textbutton "Нет." action Jump("no")

    timer 3.0 action Jump("too_slow")


◇ Оператор transform[править | править код]

Применяет преобразование к своему дочернему элементу. Принимает не параметры, а следующие группы свойств:

Требуется один дочерний элемент.


◇ Оператор vbar[править | править код]

Вертикально ориентированный эквивалент оператора bar. Свойства такие же, как у bar.

screen volume_controls():
     frame:
         has hbox

         vbar value Preference("sound volume")
         vbar value Preference("music volume")
         vbar value Preference("voice volume")


◇ Оператор vbox[править | править код]

Отображает дочерние элементы один над другим в невидимом вертикальном поле. Принимает не параметры, а следующие группы свойств:

Отображаемые дочерние элементы пользовательского интерфейса добавляются в блочный элемент.

screen vbox_test():
    vbox:
         text "Верхний."
         text "Нижний."


◇ Оператор viewport[править | править код]

Область просмотра – область экрана, которую можно прокручивать перетаскиванием, колесом мыши или полосами прокрутки. Может быть использован для отображения части чего-то большего, чем экран. Принимает следующие свойства:

child_size
Размер, который предлагается дочернему элементу для рендеринга. Кортеж (xsize, ysize). Обычно можно опустить, когда дочерний элемент может вычислить свой собственный размер. Если какой-либо из компонентов принимает значение None, используется размер дочернего элемента.
mousewheel
Должно быть одним из:
False
Игнорирует колесо мыши. По умолчанию.
True
Для прокрутки по вертикали.
"horizontal"
Для прокрутки по горизонтали.
"change"
Для прокрутки области просмотра по вертикали, только если это приведёт к перемещению области просмотра. Если нет, то событие mousewheel передается остальной части интерфейса. Например, если задано изменение, размещение key "viewport_wheeldown" action Return() перед областью просмотра приведёт к возвращению экрана, если область просмотра прокручивается до самого конца.
"horizontal-change"
Совмещает горизонтальную прокрутку со сменой режима.
draggable
Если принимает значение True, перетаскивание мыши будет прокручивать область просмотра.
edgescroll
Управляет прокруткой, когда мышь достигает края области просмотра. Если принимает значение не None, это должен быть кортеж из двух или трех элементов:
  • Первый элемент в кортеже – расстояние от края области просмотра, на котором начинает действовать прокрутка краев, в пикселях.
  • Второй элемент – максимальная скорость прокрутки в пикселях в секунду.
  • Если присутствует, третий элемент – функция, которая регулирует скорость прокрутки в зависимости от того, насколько близко указатель находится к краю. Функция должна принимать число между -1.0 и 1.0 и возвращать число в том же диапазоне. Функция по умолчанию возвращает свои входные данные и реализует пропорциональную прокрутку. Функция, которая возвращает -1.0 или 1.0 на основе знака своего ввода, будет реализовывать прокрутку с постоянной скоростью.
xadjustment
ui.adjustment() используется для оси X области просмотра. Если опущено, создаётся новая корректировка.
yadjustment
ui.adjustment() используется для оси У области просмотра. Если опущено, создаётся новая корректировка.
xinitial
Начальное горизонтальное смещение области просмотра. Это может быть целое число, указывающее количество пикселей, или число с плавающей точкой, указывающее долю возможного смещения.
yinitial
Начальное вертикальное смещение области просмотра. Это может быть целое число, указывающее количество пикселей, или число с плавающей точкой, указывающее долю возможного смещения.
scrollbars
Если принимает значение не None, полосы прокрутки добавляются вместе с этим окном просмотра. Работает путём создания макета стороны и размещения созданной области просмотра в центре стороны. Если scrollbars "горизонтальны", горизонтальная полоса прокрутки помещается ниже области просмотра. Если scrollbars "вертикальные", вертикальная полоса прокрутки располагается справа от области просмотра. Если scrollbars «оба», создаются как горизонтальные, так и вертикальные полосы прокрутки.
Если scrollbars принимает значение не None, область просмотра принимает свойства с префиксом оператора "side". Они передаются в созданный макет стороны.
arrowkeys
Если принимает значение True, область просмотра можно прокручивать с помощью клавиш со стрелками влево, вправо, вверх и вниз. Это имеет приоритет над обычной функцией этих клавиш, которая заключается в изменении фокуса. Однако клавиши со стрелками изменят фокус, когда область просмотра достигнет своих пределов.
pagekeys
Если принимает значение True, область просмотра можно прокручивать вверх и вниз с помощью клавиш pageup и pagedown. Это отключает обычную функциональность этих клавиш, которая вызывает откат и прогон.


Кроме того, он принимает следующие группы свойств стиля:


Требуется один дочерний элемент. Если задано ноль, два или более дочерних элементов, то для их хранения создаётся фиксированный элемент.

Чтобы сделать окно просмотра прокручиваемым, часто лучше назначить ему идентификатор, а затем использовать XScrollValue() и YScrollValue() с этим идентификатором.

screen viewport_example():
    side "c b r":
         area (100, 100, 600, 400)

         viewport id "vp":
             draggable True

             add "washington.jpg"

         bar value XScrollValue("vp")
         vbar value YScrollValue("vp")


◇ Оператор vpgrid[править | править код]

Оператор vpgrid объединяет область просмотра и сетку в один отображаемый объект. Принимает несколько дочерних элементов (например, сетку) и оптимизируется таким образом, что в пределах области просмотра отображаются только дочерние элементы.

Оператор vpgrid предполагает, что все дочерние элементы имеют одинаковый размер, причем размер берется из размеров первого дочернего элемента. Если vpgrid отображается неправильно, убедитесь, что все дочерние элементы имеют одинаковый размер.

Для vpgrid должно быть указано хотя бы одно из свойств cols и rows. Если один из них опущен или принимает значение None, другой автоматически определяется по размеру, интервалу и количеству дочерних элементов. Если дочерних элементов недостаточно для заполнения всех ячеек, пустые ячейки не будут отображаться.


Принимает следующие свойства:

cols
Количество столбцов в сетке.
rows
Количество строк в сетке.
transpose
Если принимает значение True,


Кроме того, vpgrid принимает все свойства оператора viewport и следующие группы свойств стиля:

screen vpgrid_test():

    vpgrid:

        cols 2
        spacing 5
        draggable True
        mousewheel True

        scrollbars "vertical"

        # Поскольку у нас есть полосы прокрутки, мы должны расположить их сбоку, 
        # а не собственно vpgrid.
        side_xalign 0.5

        for i in range(1, 100):

            textbutton "Кнопка [i]":
                xysize (200, 50)
                action Return(i)


◇ Оператор window[править | править код]

Окно – окно, содержащее фон, предназначенный для отображения внутриигрового диалога. Принимает следующие группы свойств:

Требуется один дочерний элемент. Если задано ноль, два или более дочерних элементов, то для их хранения создаётся фиксированный элемент.

screen say(who, what):
    window id "window"
        vbox:
            spacing 10

            text who id "who"
            text what id "what"

Операторы карты изображения (Imagemap Statements)[править | править код]

Удобный способ создания экрана, особенно для тех, кто мыслит визуальными образами, заключается в создании карты изображений. При создании карты изображений оператор imagemap используется для указания до шести изображений. Изображения hotspot и hotbar используются для вырезания прямоугольных областей из изображения и применения действий и значений к этим областям.

Ниже приведён пример экрана настроек, который использует карту изображений:

screen preferences():

    tag menu
    use navigation

    imagemap:
        auto "gui_set/gui_prefs_%s.png"

        hotspot (740, 232, 75, 73) action Preference("display", "fullscreen") alt _("Display Fullscreen")
        hotspot (832, 232, 75, 73) action Preference("display", "window") alt _("Display Window")
        hotspot (1074, 232, 75, 73) action Preference("transitions", "all") alt _("Transitions All")
        hotspot (1166, 232, 75, 73) action  Preference("transitions", "none") alt _("Transitions None")

        hotbar (736, 415, 161, 20) value Preference("music volume") alt _("Music Volume")
        hotbar (1070, 415, 161, 20) value Preference("sound volume") alt _("Sound Volume")
        hotbar (667, 535, 161, 20) value Preference("voice volume") alt _("Voice Volume")
        hotbar (1001, 535, 161, 20) value Preference("text speed") alt _("Text Speed")


◇ Оператор imagemap[править | править код]

Используется для определения карты изображений. Принимает не параметры, а следующие свойства:

auto
Используется для автоматического определения изображений, используемых этой картой изображения. Должна быть строка, содержащая %s. Если это так, и одно из свойств изображения не задано, %s заменяется именем этого свойства, а значение по умолчанию используется для этого свойства.
Например, если auto – "imagemap_%s.png" и idle не задан, то по умолчанию idle имеет значение "imagemap_idle.png". Если auto – "imagemap %s", используется изображение imagemap idle.
Поведение auto можно настроить, изменив config.imagemap_auto_function.
ground
Изображение, используемое для элементов карты изображения, которые не являются частью hotspot или hotbar.
insensitive
Изображение, используемое, когда hotspot или hotbar нечувствительны к воздействию.
idle
Изображение, используемое, когда hotspot не выбрана и не сфокусирована, а также для пустой части несфокусированных hotbar.
hover
Изображение, используемое, когда hotspot не выбрана и сфокусирована, а также для пустой части сфокусированных hotbar.
selected_idle
Изображение, используемое, когда hotspot выбрана и не сфокусирована, а также для заполненной части несфокусированных hotbar.
selected_hover
Изображение, используемое, когда hotspot выбрана и сфокусирована, а также для заполненной части сфокусированных hotbar.
alpha
Если принимает значение True, по умолчанию hotspot получает фокус только при наведении курсора мыши на непрозрачное изображение. Если принимает значение False, hotspot получает фокус всякий раз, когда курсор мыши находится в пределах её прямоугольной границы.
cache
Если принимает значение True, по умолчанию данные hotspot кэшируются для повышения производительности за счет дополнительного места на диске.


Принимает следующие группы свойств:

Карта изображения создаёт фиксированный элемент, позволяя добавлять в неё любые дочерние элементы, а не только hotspot и hotbar.


◇ Оператор hotspot[править | править код]

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

action
Действие, которое выполняется при нажатии кнопки. Оно также управляет поведением кнопки если та чувствительна, либо выбрана.
alternate
Действие, которое выполняется, если горячая точка активируется альтернативным способом. Альтернативная активация происходит, когда игрок щелкает правой кнопкой мыши по горячей точке на платформе, основанной на мыши, или когда игрок долго нажимает на горячую точку на сенсорной платформе.
hovered
Действие, выполняемое, когда кнопка находится в фокусе.
unhovered
Действие, выполняемое, когда кнопка теряет фокус.
selected
Выражение, определяющее, выбрана кнопка или нет. Вычисляется по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения выбранности.
sensitive
Выражение, определяющее, является ли кнопка чувствительной или нет. Оценивается по крайней мере один раз за взаимодействие. Если выражение не определено, действие будет использоваться для определения чувствительности кнопки.
keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает действие этой кнопки.
alternate_keysym
Строка, задающая раскладку клавиатуры, описывающую клавишу на клавиатуре, которая при нажатии вызывает альтернативное действие этой кнопки.


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


Оператор hotspot создаёт фиксированный объект, позволяющий добавлять в него дочерние элементы. Фиксированная область имеет тот же размер, что и горячая точка, а это означает, что дочерние элементы будут расположены относительно горячей точки.

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


◇ Оператор hotbar[править | править код]

Панель быстрого доступа – панель, состоящая из части карты изображения, которая её содержит. Принимает один параметр – кортеж (x, y, ширина, высота), задающий область карты изображения, которая составляет кнопку. Также принимает следующие свойства:

value
Текущее значение панели. Может быть либо объектом значения панели, либо число.
range
Максимальное значение панели. Необходимо, если value является числом.
adjustment
Объект ui.adjustment(), который корректирует эта панель.


Одно из свойств value или adjustment должно быть задано. Кроме того, эта функция принимает следующие свойства:

Не принимает дочерние элементы.

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

Операторы расширенного отображаемого объекта (Advanced Displayables)[править | править код]

В дополнение к часто используемым операторам язык экрана имеет операторы, соответствующие расширенным отображаемым объектам. Связи между отображаемым объектом и оператором простые. Позиционные параметры отображаемых объектов становятся позиционными параметрами оператора. Именованные аргументы и соответствующие свойства стиля становятся свойствами языка экрана.


Операторы расширенного отображаемого объекта:

drag
Создаёт Drag. Перетаскиванию может быть задан необязательный дочерний элемент или свойство стиля child может использоваться для предоставления дочернего элемента и его целевых вариантов. Перетаскивание также принимает свойство стиля focus_mask.
draggroup
Создаёт DragGroup. Группа перетаскивания может иметь ноль или более перетаскиваний в качестве дочерних элементов.

Оператор has (Has Statement)[править | править код]

Оператор has позволяет вам указать контейнер, который будет использоваться вместо фиксированного элемента для операторов, которые принимают только один дочерний элемент. Оператор has может использоваться только внутри оператора, который принимает одного дочернего элемента. За ключевым словом has следует (в той же строке) другой оператор, который должен быть оператором, создающим отображаемый контейнер, который принимает более одного дочернего элемента.

Оператор has изменяет способ синтаксического анализа содержащего его блока. Дочерние элементы отображаемого объекта созданные в этом блоке, добавляются в контейнер, а не в родительские. Именованные аргументы для родительского элемента отображаемого объекта после оператора has не допускаются. Несколько операторов могут быть использованы в одном и том же блоке.

Оператор has может быть предоставлен как дочерний элемент следующих операторов:

  • button
  • frame
  • window

Оператору has можно задать следующие операторы в качестве контейнера:

  • fixed
  • grid
  • hbox
  • side
  • vbox
screen volume_controls():
     frame:
         has vbox

         bar value Preference("sound volume")
         bar value Preference("music volume")
         bar value Preference("voice volume")

Операторы управления (Control Statements)[править | править код]

Язык экрана включает в себя операторы управления для условного выполнения, итерации, включая другие экраны, выполнение действий при возникновении событий и выполнение произвольного Python.


◇ Оператор default[править | править код]

Оператор default задаёт значение переменной по умолчанию, если оно не передаётся в качестве аргумента экрану или наследуется от экрана, который вызывает нас с помощью оператора use.

screen scheduler():
    default club = None
    vbox:
         text "Что вы хотите сделать?"
         textbutton "Арт-клуб" action SetScreenVariable("club", "art")
         textbutton "Писательский клуб" action SetScreenVariable("club", "writing")

         if club:
             textbutton "Выбрать" action Return(club)


◇ Оператор for[править | править код]

Оператор for похож на оператор for языка Python, за исключением того, что он не поддерживает else. Он поддерживает присвоение (необязательно вложенных) шаблонов кортежей, а также переменных.

$ numerals = [ 'I', 'II', 'III', 'IV', 'V' ]

screen five_buttons():
    vbox:
        for i, numeral in enumerate(numerals):
            textbutton numeral action Return(i + 1)

Оператор for принимает index:

screen five_buttons():
    vbox:
        for i, numeral index numeral in enumerate(numerals):
            textbutton numeral action Return(i + 1)

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


◇ Оператор if[править | править код]

Язык экранного оператора if такой же, как оператор Python/Ren'Py if. Он поддерживает операторы if, elif и else.

screen skipping_indicator():
    if config.skipping:
         text "Пропуск."
    else:
         text "Не пропускать."


◇ Оператор on[править | править код]

Оператор on позволяет экрану выполнять действие при возникновении события. Он принимает один параметр – строку, задающую имя события. Это должно быть одним из:

  • "show"
  • "hide"
  • "replace"
  • "replaced"


Затем он принимает свойство action, задавая действие для запуска в случае возникновения события.

screen preferences():
    frame:
        has hbox

        text "Режим экрана"
        textbutton "Полноэкранный" action Preferences("display", "fullscreen")
        textbutton "Оконный" action Preferences("display", "window")

    on "show" action Show("navigation")
    on "hide" action Hide("navigation")


◇ Оператор use[править | править код]

Оператор use позволяет экрану включать другой. Оператор use принимает имя используемого экрана. За этим может дополнительно следовать список аргументов в круглых скобках.

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

screen file_slot(slot):
    button:
        action FileAction(slot)

        has hbox

        add FileScreenshot(slot)
        vbox:
            text FileTime(slot, empty="Empty Slot.")
            text FileSaveName(slot)


screen save():
     grid 2 5:
         for i in range(1, 11):
              use file_slot(i)


Оператор use может принимать одно свойство id, которое должно быть помещено после списка параметров, если оно присутствует. Этот экран полезен только тогда, когда два экрана с одинаковым тегом используют один и тот же экран. В этом случае, когда один экран заменяет другой, состояние используемого экрана переносится со старого на новый.

transform t1():
    xpos 150
    linear 1.0 xpos 0

screen common():
    text "Test" at t1

screen s1():
    tag s
    use common id "common"
    text "s1" ypos 100

screen s2():
    tag s
    use common id "common"
    text "s2" ypos 100

label start:
    show screen s1
    pause
    show screen s2
    pause
    return


Вместо имени экрана может быть задано ключевое слово expression, за которым следует выражение, задающее имя используемого экрана. Если требуются параметры, необходимо задать ключевое слово pass, чтобы отделить их от выражения.

screen ed(num):
    text "Эд"
    text "Капитан"

screen kelly(num):
    text "Келли"
    text "Первый офицер"

screen bortus(num):
    text "Бортус"
    text "Второй офицер"

screen crew():
    hbox:
        for i, member in enumerate(party):
            vbox:
                use expression member.screen pass (i + 1)

◇ Оператор use и transclude[править | править код]

Оператор use может также принимать блок, содержащий операторы языка экрана. Когда задан блок, используемый экран может содержать оператор transclude. Оператор transclude заменяется на операторы, содержащиеся в блоке оператора use.

Это позволяет определять многократно используемые макеты с помощью экранов. Например, экран:

screen movable_frame(pos):
    drag:
        pos pos

        frame:
            background Frame("movable_frame.png", 10, 10)
            top_padding 20

            transclude

предназначен для многократного использования компонента, который упаковывать другие компоненты. Вот пример того, как его можно использовать:

screen test:
    use movable_frame((0, 0)):
        text "Ты можешь увести меня."

    use movable_frame((0, 100)):
        vbox:
            text "Ты можешь увести меня тоже."
            textbutton "Понял!" action Return(True)

Конструкции use и transclude образуют основу операторов языка экрана, определяемых создателем.


◇ Оператор python[править | править код]

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

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

screen python_screen:
    python:
        test_name = "Test %d" % test_number

    text test_name

    $ test_label = "test_%d" % test_label

    textbutton "Выполнить тест" action Jump(test_label)

Оператор showif (Showif Statement)[править | править код]

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

Оператор showif упаковывает свои дочерние элементы в отображаемый объект, который управляет процессом показа и скрытия.

Несколько операторов showif можно сгруппировать в одну конструкцию showif/elif/else, похожую на оператор if. В отличие от оператора if, showif выполняет все свои блоки, включая Python, даже если условие ложно. Это происходит потому, что оператор showif должен создать дочерние элементы, которые он скрывает.


Операторов showif предоставляет три события своим дочерним элементам:

appear
Предоставляется, если условие истинно при первом показе экрана, чтобы мгновенно показать дочерний элемент.
show
Предоставляется, когда условие изменяется с ложного на истинное.
hide
Предоставляется, когда условие изменяется с истинного на ложное.


Для этих целей условие оператора elif всегда ложно, если какое-либо предыдущее условие истинно, тогда как условие оператора else истинно только тогда, когда все предыдущие условия ложны.

Например:

transform cd_transform:
    # Выполняется до появления, показа или скрытия.
    xalign 0.5 yalign 0.5 alpha 0.0

    on appear:
        alpha 1.0
    on show:
        zoom .75
        linear .25 zoom 1.0 alpha 1.0
    on hide:
        linear .25 zoom 1.25 alpha 0.0

screen countdown():
    default n = 3

    vbox:
        textbutton "3" action SetScreenVariable("n", 3)
        textbutton "2" action SetScreenVariable("n", 2)
        textbutton "1" action SetScreenVariable("n", 1)
        textbutton "0" action SetScreenVariable("n", 0)

    showif n == 3:
        text "Три" size 100 at cd_transform
    elif n == 2:
        text "Два" size 100 at cd_transform
    elif n == 1:
        text "Один" size 100 at cd_transform
    else:
        text "Старт!" size 100 at cd_transform

label start:
    call screen countdown

Операторы экрана (Screen Statements)[править | править код]

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


◇ Оператор show screen[править | править код]

Оператор show screen вызывает отображение экрана. Принимает имя экрана и необязательный список аргументов языка Python. Если они присутствуют, аргументы используются для инициализации области действия экрана. Есть также некоторые конкретные ключевые слова, передаваемые в show_screen() и call_screen().

Оператор show screen принимает необязательное ключевое слово nopredict, которое предотвращает прогнозирование экрана. Во время прогнозирования экрана оцениваются аргументы на экране. Пожалуйста, убедитесь, что оценка аргументов экрана не вызывает неожиданных побочных эффектов.



Предупреждение! Если при оценке аргументов на экране возникают побочные эффекты, ваша игра может вести себя неожиданным образом.


Показанные таким образом экраны отображаются до тех пор, пока они не будут явно скрыты. Это позволяет использовать их в целях наложения.

show screen overlay_screen
show screen clock_screen(hour=11, minute=30)

if rare_case:
    show rare_screen nopredict

Оператор show screen принимает оператор with, который интерпретируется так же, как и оператор with оператора show.

show screen clock_screen with dissolve


◇ Оператор hide screen[править | править код]

Оператор hide screen используется для скрытия экрана, который отображается в данный момент. Если экран не отображается, ничего не происходит. Оператор with интерпретируется так же, как оператор with оператора show.

hide screen rare_screen
hide screen clock_screen with dissolve
hide screen overlay_screen


◇ Оператор call screen[править | править код]

Оператор call screen показывает экран, а затем снова скрывает его в конце текущего взаимодействия. Если экран возвращает значение, оно помещается в _return.

Это можно использовать для отображения карты изображений. Карта изображений может поместить значение в переменную _return с помощью действия Return() или перейти к метке с помощью действия Jump().

Оператор call screen принимает необязательное ключевое слово nopredict, которое предотвращает прогнозирование экрана. Во время прогнозирования экрана оцениваются аргументы на экране. Пожалуйста, убедитесь, что оценка аргументов экрана не вызывает неожиданных побочных эффектов.

Оператор call screen принимает необязательное ключевое слово with, за которым следует переход. Переход происходит при первом отображении экрана. Оператор with после перехода выполняется после того, как экран скрыт, при условии, что управление не передано.



Предупреждение! Если при оценке аргументов на экране возникают побочные эффекты, ваша игра может вести себя неожиданным образом.


call screen my_imagemap

call screen my_screen(side_effect_function()) nopredict

# Показывает экран с dissolve и скрывает с fade.
call screen my_other_screen with dissolve
with fade

Варианты экрана (Screen Variants)[править | править код]

Ren'Py работает как на традиционных устройствах, ориентированных на мышь, таких как ПК с Windows, Mac и Linux, так и на новых устройствах с сенсорным управлением, таких как смартфоны и планшеты на базе Android. Варианты экрана позволяют игре предоставлять несколько версий экрана и использовать версию, которая лучше всего соответствует оборудованию, на котором она работает.

Ren'Py выбирает вариант экрана для использования путём поиска вариантов в том порядке, в котором они перечислены в config.variants. Используется первый вариант, который существует.

Если переменная окружения RENPY_VARIANT присутствует, файл config.variants инициализируется путём разделения значения переменной на пробел, а затем добавления None. Установка для RENPY_VARIANT значения, как "medium tablet touch" или "small phone touch", позволяет тестировать экраны, предназначенные для устройств Android, на ПК.

Если переменная окружения отсутствует, список вариантов создается автоматически, просматривая следующий список по порядку и выбирая записи, относящиеся к текущей платформе.

"large"
Экран достаточно большой, чтобы относительно небольшой текст можно было удобно читать, а кнопки можно было легко нажимать. Используется для экранов компьютеров.
"medium"
Экран, на котором можно читать небольшой текст, но может потребоваться увеличить размер кнопок, чтобы их можно было удобно нажимать. Используется для планшетов.
"small"
Экран, на котором текст должен быть расширен, чтобы его можно было прочитать. Используется для телефонов и телевизоров. Телевизор может быть физически большим, но он часто находится далеко, что затрудняет чтение.
"tablet"
Определяется на устройствах с сенсорным экраном, где диагональ экрана составляет 6 дюймов или более. Как правило, вместо слова "tablet" следует использовать слово "medium".
"phone"
Определяется на устройствах с сенсорным экраном, где диагональ экрана составляет менее 6 дюймов. На таком маленьком устройстве важно сделать кнопки достаточно большими, чтобы пользователь мог легко их выбрать. В общем, вместо "phone" следует использовать "small".
"touch"
Определяется на устройствах с сенсорным экраном.
"tv"
Определяется на телевизионных устройствах.
"ouya"
Определяется на консоли OUYA. "tv" и "small" также определены.
"firetv"
Определяется на консоли Amazon Fire TV. "tv" и "small" также определены.
"android"
Определяется на всех устройствах Android.
"ios"
Определяется на устройствах iOS, таких как iPad (где также определены "tablet" и "medium") и iPhone (где также определены "phone" и "small").
"mobile"
Определяется на мобильных платформах, таких как Android, iOS и мобильные веб-браузеры.
"pc"
Определяется в Windows, Mac OS X и Linux. Предполагается, что на ПК будут присутствовать мышь и клавиатура, чтобы можно было перемещать кнопки и обеспечивать точное наведение.
"web"
Определяется при запуске в веб-браузере.
None
Всегда определён.


Пример определения варианта экрана:

# Вариант экрана hello_world, используемый
# на небольших сенсорных устройствах.
screen hello_world():
     tag example
     zorder 1
     modal False
     variant "small"

     text "Привет, мир." size 30

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

Статья "Screens and Screen Language" на английском языке.


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