Специальные имена экранов
В Ren'Py есть два вида специальных имён экранов. Первый вид — это экраны, которые будут автоматически отображаться при выполнении команд языка сценариев Ren'Py (или их программных эквивалентов). Второй вид — это экраны меню. У них есть общепринятые имена для общепринятой функциональности, но экраны можно опускать или изменять по мере необходимости.
На этой странице мы приведём примеры экранов. Важно понимать, что, хотя некоторые экраны должны обладать минимальной функциональностью, система экранов позволяет добавлять к ним дополнительные возможности. Например, хотя стандартный экран say отображает только текст, система экранов позволяет легко добавить такие функции, как пропуск, режим автопрокрутки или отключение звука.
Некоторые специальные экраны принимают параметры. К этим параметрам можно обращаться как к переменным в области видимости экрана.
У некоторых экранов также есть связанные с ними специальные id. Специальный id должен быть присвоен отображаемому объекту (displayable) определённого типа. Это может привести к присвоению свойств этому отображаемому объекту и сделать его доступным для той части Ren'Py, которая отображает экран.
Примечание
Примеры экранов на этой странице могут не совпадать с экранами, включёнными в состав новой созданной игры.
Внутриигровые экраны
Эти экраны автоматически отображаются при выполнении определённых операторов Ren'Py.
Say
Экран say вызывается оператором say при отображении диалога в режиме ADV.
Он отображается со следующими параметрами:
- who
Текст имени говорящего персонажа.
- what
Диалог, произносимый говорящим персонажем.
Ожидается, что будут объявлены отображаемые объекты (displayables) со следующими id:
- "who"
Текстовый отображаемый объект, показывающий имя говорящего персонажа. Объекту персонажа можно передать аргументы, которые стилизуют этот displayable.
- "what"
Текстовый отображаемый объект, показывающий реплику говорящего персонажа. Объекту персонажа можно передать аргументы, которые стилизуют этот displayable. Отображаемый объект (displayable) с этим id должен быть определён, так как Ren'Py использует его для расчёта времени режима автопрокрутки, ожидания клика для продолжения (click-to-continue) и других вещей.
- "window"
Окно или фрейм. Обычно он содержит текст who и what. Объекту персонажа можно передать аргументы, которые стилизуют этот displayable.
screen say(who, what):
window id "window":
has vbox
if who:
text who id "who"
text what id "what"
Choice
Экран choice используется для отображения внутриигровых выборов, созданных с помощью
оператора menu. Ему передаётся следующий параметр:
- items
Это список объектов записей меню, представляющих каждый из выборов в меню. У каждого объекта есть следующие поля:
- caption
Строка с заголовком пункта меню.
- action
Действие, которое должно быть вызвано при выборе пункта меню. Может быть None, если это заголовок меню, а
config.narrator_menuимеет значение False.
- chosen
Имеет значение True, если этот выбор был сделан хотя бы один раз за любое прохождение игры.
- args
Это кортеж, содержащий любые позиционные аргументы, переданные пункту меню.
- kwargs
Это словарь, содержащий любые именованные аргументы, переданные пункту меню.
Эти элементы и действия в них становятся недействительными после завершения оператора menu.
Кроме того, любые аргументы, переданные оператору menu, передаются во время вызова экрана.
screen choice(items):
window:
style "menu_window"
vbox:
style "menu"
for i in items:
if i.action:
button:
action i.action
style "menu_choice_button"
text i.caption style "menu_choice"
else:
text i.caption style "menu_caption"
Input
Экран input используется для отображения renpy.input(). Ему передаётся
один параметр:
- prompt
Текст-подсказка, предоставленный renpy.input.
Ожидается, что будет объявлен отображаемый объект (displayable) со следующим id:
- "input"
Отображаемый объект для ввода, который должен существовать. Ему передаются все параметры, предоставленные renpy.input, поэтому он должен существовать.
screen input(prompt):
window:
has vbox
text prompt
input id "input"
NVL
Экран nvl используется для отображения диалога в режиме NVL. Ему
передаётся следующий параметр:
- dialogue
Список объектов NVL Entry, каждый из которых соответствует строке диалога для отображения. Каждая запись имеет следующие поля:
- current
Истинно (True), если это текущая строка диалога. Текст what текущей строки диалога должен отображаться с id what.
- who
Имя говорящего персонажа, или None, если такого имени нет.
- what
Произносимый текст.
- who_id, what_id, window_id
Предпочтительные id для говорящего, диалога и окна, связанных с записью.
- who_args, what_args, window_args
Свойства, связанные с говорящим, диалогом и окном. Они применяются автоматически, если id установлен, как указано выше, но также доступны и отдельно.
- multiple
Если используется диалог с несколькими персонажами, это кортеж из двух компонентов. Первый компонент — это номер блока диалога (начиная с 1), а второй — общее количество блоков диалога в операторе multiple.
- items
Это тот же список элементов, который был бы предоставлен экрану choice. Если он пуст, меню не должно отображаться.
Когда items отсутствует, ожидается, что экран NVL всегда будет присваивать текстовому виджету id what. Ren'Py использует его для расчёта времени режима автопрокрутки, ожидания клика для продолжения (click-to-continue) и других вещей. (Это выполняется автоматически, если используется what_id по умолчанию.)
Ren'Py также поддерживает экран nvl_choice, который принимает те же
параметры, что и nvl, и используется вместо nvl, когда
пользователю предоставляется внутриигровой выбор, если такой экран существует.
screen nvl(dialogue, items=None):
window:
style "nvl_window"
has vbox:
style "nvl_vbox"
# Display dialogue.
for d in dialogue:
window:
id d.window_id
has hbox:
spacing 10
if d.who is not None:
text d.who id d.who_id
text d.what id d.what_id
# Display a menu, if given.
if items:
vbox:
id "menu"
for i in items:
if action:
button:
style "nvl_menu_choice_button"
action i.action
text i.caption style "nvl_menu_choice"
else:
text i.caption style "nvl_dialogue"
Notify
Экран notify используется функцией renpy.notify() для отображения
уведомлений пользователю. Обычно он используется в сочетании с
трансформацией (transform) для выполнения всей задачи уведомления.
Ему передаётся один параметр:
- message
Сообщение для отображения.
Пример экрана notify:
screen notify(message):
zorder 100
text "[message!tq]" at _notify_transform
# This controls how long it takes between when the screen is
# first shown, and when it begins hiding.
timer 3.25 action Hide('notify')
transform _notify_transform:
# These control the position.
xalign .02 yalign .015
# These control the actions on show and hide.
on show:
alpha 0
linear .25 alpha 1.0
on hide:
linear .5 alpha 0.0
Индикатор пропуска
Если он существует, экран skip_indicator отображается во время пропуска
и скрывается, когда пропуск завершается. Он не принимает параметров.
Вот очень простой пример экрана индикатора пропуска:
screen skip_indicator():
zorder 100
text _("Skipping")
CTC (Нажмите-для-продолжения)
Если он существует, экран ctc отображается после завершения показа
диалога, чтобы побудить игрока нажать для отображения дальнейшего текста.
Ему может быть передан один позиционный параметр и несколько именованных аргументов.
- arg
Отображаемый объект (displayable) ctc, выбранный
Character(). Это один из аргументов ctc, ctc_pause или ctc_timedpause для Character, в зависимости от ситуации. Если CTC не задан для Character, этот аргумент вообще не передаётся.
Кроме того, есть несколько параметров, которые передаются, только если экран их запрашивает.
- ctc_kind
Тип отображаемого CTC. Один из: "last" (для последнего CTC в строке), "pause" или "timedpause".
- ctc_last
Аргумент ctc для
Character().- ctc_pause
Аргумент ctc_pause для
Character().- ctc_timedpause
Аргумент ctc_timedpause для
Character().
Вот очень простой пример экрана ctc:
screen ctc(arg=None):
zorder 100
hbox:
xalign 0.98
yalign 0.98
add arg
text _("Click to Continue"):
size 12
Внеигровые экраны меню
Это экраны меню. Экраны main_menu и yesno_prompt
вызываются неявно. Когда пользователь вызывает игровое меню,
будет отображён экран, имя которого указано в _game_menu_screen.
(По умолчанию это save.)
Помните, что экраны меню можно довольно свободно комбинировать и изменять.
Сохранение
Экран save используется для выбора файла, в который будет
сохранена игра.
screen save():
# This ensures that any other menu screen is replaced.
tag menu
use navigation
frame:
has vbox
# The buttons at the top allow the user to pick a
# page of files.
hbox:
textbutton _("Previous") action FilePagePrevious()
textbutton _("Auto") action FilePage("auto")
for i in range(1, 9):
textbutton str(i) action FilePage(i)
textbutton _("Next") action FilePageNext()
# Display a grid of file slots.
grid 2 5:
transpose True
xfill True
# Display ten file slots, numbered 1 - 10.
for i in range(1, 11):
# Each file slot is a button.
button:
action FileAction(i)
xfill True
style "large_button"
has hbox
# Add the screenshot and the description to the
# button.
add FileScreenshot(i)
text ( " %2d. " % i
+ FileTime(i, empty=_("Empty Slot."))
+ "\n"
+ FileSaveName(i)) style "large_button_text"
Загрузка
Экран load используется для выбора файла, из которого будет
загружена игра.
screen load():
# This ensures that any other menu screen is replaced.
tag menu
use navigation
frame:
has vbox
# The buttons at the top allow the user to pick a
# page of files.
hbox:
textbutton _("Previous") action FilePagePrevious()
textbutton _("Auto") action FilePage("auto")
for i in range(1, 9):
textbutton str(i) action FilePage(i)
textbutton _("Next") action FilePageNext()
# Display a grid of file slots.
grid 2 5:
transpose True
xfill True
# Display ten file slots, numbered 1 - 10.
for i in range(1, 11):
# Each file slot is a button.
button:
action FileAction(i)
xfill True
style "large_button"
has hbox
# Add the screenshot and the description to the
# button.
add FileScreenshot(i)
text ( " %2d. " % i
+ FileTime(i, empty=_("Empty Slot."))
+ "\n"
+ FileSaveName(i)) style "large_button_text"
Настройки
Экран preferences используется для выбора опций, которые управляют
отображением игры.
В целом, настройки — это либо действия (actions), либо значения для
ползунка (bar values), возвращаемые функцией Preference().
screen preferences():
tag menu
# Include the navigation.
use navigation
# Put the navigation columns in a three-wide grid.
grid 3 1:
style_prefix "prefs"
xfill True
# The left column.
vbox:
frame:
style_prefix "pref"
has vbox
label _("Display")
textbutton _("Window") action Preference("display", "window")
textbutton _("Fullscreen") action Preference("display", "fullscreen")
frame:
style_prefix "pref"
has vbox
label _("Transitions")
textbutton _("All") action Preference("transitions", "all")
textbutton _("None") action Preference("transitions", "none")
frame:
style_prefix "pref"
has vbox
label _("Text Speed")
bar value Preference("text speed")
frame:
style_prefix "pref"
has vbox
textbutton _("Joystick...") action ShowMenu("joystick_preferences")
vbox:
frame:
style_prefix "pref"
has vbox
label _("Skip")
textbutton _("Seen Messages") action Preference("skip", "seen")
textbutton _("All Messages") action Preference("skip", "all")
frame:
style_prefix "pref"
has vbox
textbutton _("Begin Skipping") action Skip()
frame:
style_prefix "pref"
has vbox
label _("After Choices")
textbutton _("Stop Skipping") action Preference("after choices", "stop")
textbutton _("Keep Skipping") action Preference("after choices", "skip")
frame:
style_prefix "pref"
has vbox
label _("Auto-Forward Time")
bar value Preference("auto-forward time")
vbox:
frame:
style_prefix "pref"
has vbox
label _("Music Volume")
bar value Preference("music volume")
frame:
style_prefix "pref"
has vbox
label _("Sound Volume")
bar value Preference("sound volume")
textbutton "Test" action Play("sound", "sound_test.ogg") style "soundtest_button"
frame:
style_prefix "pref"
has vbox
label _("Voice Volume")
bar value Preference("voice volume")
textbutton "Test" action Play("voice", "voice_test.ogg") style "soundtest_button"
style pref_frame:
xfill True
xmargin 5
top_margin 5
style pref_vbox:
xfill True
style pref_button:
size_group "pref"
xalign 1.0
style pref_slider:
xmaximum 192
xalign 1.0
style soundtest_button:
xalign 1.0
Подтверждение
Экран confirm используется, чтобы запрашивать у пользователя выбор
«да/нет». Он принимает следующие параметры:
- message
Сообщение для отображения пользователю. Ren'Py использует как минимум следующие сообщения:
gui.ARE_YOU_SURE - "Are you sure?" Это должно быть значением по умолчанию, если сообщение неизвестно.
gui.DELETE_SAVE - "Are you sure you want to delete this save?"
gui.OVERWRITE_SAVE - "Are you sure you want to overwrite your save?"
gui.LOADING - "Loading will lose unsaved progress.nAre you sure you want to do this?"
gui.QUIT - "Are you sure you want to quit?"
gui.MAIN_MENU - "Are you sure you want to return to the mainnmenu? This will lose unsaved progress."
gui.CONTINUE - "Are you sure you want to continue where you left off?"
gui.END_REPLAY - "Are you sure you want to end the replay?"
gui.SLOW_SKIP - "Are you sure you want to begin skipping?"
gui.FAST_SKIP_SEEN - "Are you sure you want to skip to the next choice?"
gui.FAST_SKIP_UNSEEN - "Are you sure you want to skip unseen dialogue to the next choice?"
UNKNOWN_TOKEN - This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?
TRUST_TOKEN - Do you trust the device the save was created on? You should only choose yes if you are the device's sole user.
Значения переменных — это строки, что означает, что их можно отобразить с помощью текстового displayable.
- yes_action
Действие, которое выполняется, когда пользователь выбирает «Да» (Yes).
- no_action
Действие, которое выполняется, когда пользователь выбирает «Нет» (No).
До версии Ren'Py 6.99.10 этот экран был известен как экран yesno_prompt.
Если экран confirm отсутствует, вместо него используется yesno_prompt.
Этот экран также будет вызываться функцией renpy.confirm() и действием Confirm().
screen confirm(message, yes_action, no_action):
modal True
window:
style "gm_root"
frame:
style_prefix "confirm"
xfill True
xmargin 50
ypadding 25
yalign .25
vbox:
xfill True
spacing 25
text _(message):
textalign 0.5
xalign 0.5
hbox:
spacing 100
xalign .5
textbutton _("Yes") action yes_action
textbutton _("No") action no_action