Внутриигровые меню (In-Game Menus)

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

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

Вот пример оператора menu:

menu:
     "Что мне сделать?"

     "Выпить кофе.":
         "Я пью кофе и оно очень вкусное."

     "Пить чай.":
         $ drank_tea = True
         "Я пью чай, стараясь не делать политических заявлений как обычно."

     "Проявить уважение.":
         jump genuflect_ending

label after_menu:

     "Выпив напиток, я продолжил свои утренние дела."


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

menu drink_menu:
    ...

За оператором menu следует блок с отступом. Он может содержать оператор say и должен содержать по крайней мере один выбор в меню. Если присутствует оператор say, он отображается на экране одновременно с menu.

Выборы пунктов меню (Menu Choices)[править | править код]

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

Когда выбор сделан, выполняется блок операторов. Если выполнение достигает конца блока, оно продолжается с оператора, указанного после оператора menu.

Вышеуказанный условный оператор состоит из ключевого слова if, за которым следует выражение Python. Пункт меню отображается только в том случае, если выражение Python принимает значение True. Например:

menu:
    "Пойти влево.":
        ...
    "Пойти направо.":
        ...
    "Перелететь." if drank_tea:
        ...

Третий вариант будет предложен только в том случае, если переменная drank_tea примет значение True. Однако если для переменной config.menu_include_disabled задано значение True, она будет отображаться как отключенная кнопка.

Оператор set в меню (Menu Set)[править | править код]

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

Как и во всех меню, если нет доступных вариантов, он переходит к оператору после меню.

По историческим причинам set может быть либо объектом набора, либо списком.

default menuset = set()


menu chapter_1_places:

    set menuset
    "Куда мне пойти?"

    "Иди в класс.":
        jump go_to_class

    "Сходить в бар.":
        jump go_to_bar

    "Сесть в тюрьму.":
        jump go_to_jail

menu chapter_1_after_places:

    "Вау, это был чертовски хороший вторник."

Аргументы меню (Menu Arguments)[править | править код]

Можно передавать аргументы как самому меню, так и отдельным пунктам меню. Чтобы передать аргументы в меню, добавьте их в строку menu после необязательного имени и непосредственно перед двоеточием. Чтобы передать аргументы в выбор пункта меню, поместите их после строки menu и перед ключевым словом if или двоеточием.

menu ("jfk", screen="airport"):

    "Чикаго, Иллинойс" (200):
        jump chicago_trip

    "Даллас, Техас" (150, sale=True):
        jump dallas_trip

    "Хот-Спрингс, Арканзас" (300) if secret_unlocked:
        jump hot_springs_trip


Аргументы меню, передаваемые в само меню, становятся аргументами экрана, за исключением аргумента screen, который определяет экран, и аргумента nvl, который определяет меню NVL-режима. Также существует специальный keyword_mode, который устанавливает режим этого взаимодействия, по умолчанию menu. Аргументы для выбора становятся аргументами для элементов, передаваемых на экран меню.


Для получения более подробной информации смотрите экран choice и config.menu_arguments_callback.

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

Статья "In-Game Menus" на английском языке.


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