Меню с отсчётом времени (Timed menus)

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

Рецепт позволяет автоматически выбрать определенный (или секретный) пункт меню, если ты будешь слишком медлить с выбором. Эти типы меню использовались в серии игр, таких как The Walking Dead или Sakura Taisen. Рецепт также включает в себя бар, который уведомляет игрока о том, сколько времени у него осталось и может быть настроен с помощью стилей. Рекомендуется таймер типа бар, поскольку это облегчает отображение обратного отсчета, но также существует вариант с использованием числового обратного отсчета.

Во-первых, создайте экран таймера и поместите его в любое место вашего скрипта.

transform alpha_dissolve:
    alpha 0.0
    linear 0.5 alpha 1.0
    on hide:
        linear 0.5 alpha 0
    # Устанавливает постепенное появление и исчезновение бара и требуется только один раз в скрипте

screen countdown:
    timer 0.01 repeat True action If(time > 0, true=SetVariable('time', time - 0.01), false=[Hide('countdown'), Jump(timer_jump)])
    bar value time range timer_range xalign 0.5 yalign 0.9 xmaximum 300 at alpha_dissolve # Это  вертикальная черта таймера.

Затем объявите переменные таймера, используемые в блоке init:

init:
    $ timer_range = 0
    $ timer_jump = 0

Если вы хотите запустить таймер, объявите эти три переменные, а потом покажите screen countdown.

# time = the time the timer takes to count down to 0.
# timer_range = число привязки ко времени (только для бара)
# timer_jump = метка для перехода, когда время выйдет

label menu1:
    $ time = 5
    $ timer_range = 5
    $ timer_jump = 'menu1_slow'
    show screen countdown
    menu:
        "Выбор 1":
            hide screen countdown
            e "Ты выбрал 'Выбор 1'"
            jump menu1_end
        "Выбор 2":
            hide screen countdown
            e "Ты выбрал 'Выбор 2'"
            jump menu1_end
   
label menu1_slow:
    e "Ты ничего не выбрал."
    
label menu1_end:
    e "Впрочем, давайте сделаем что-нибудь еще."

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

label menu2:
    $ time = 5
    $ timer_range = 5
    $ timer_jump = 'menu2_v2'
    show screen countdown
    menu:
        "Срочный Выбор 1":
            hide screen countdown
            e "Ты быстро выбрал 'Выбор 1'"
            jump menu2_end
        "Срочный Выбор 2":
            hide screen countdown
            e "Ты быстро выбрал 'Выбор 2'"
            jump menu2_end

label menu2_v2:
    $ time = 5
    $ timer_range = 5
    $ timer_jump = 'menu2_slow'
    show screen countdown
    menu:
        "Медленный Выбор 1":
            hide screen countdown
            e "Ты выбрал 'Выбор 1', но слишком медленно"
            jump menu2_end
        "Медленный Выбор 2":
            hide screen countdown
            e "Ты выбрал 'Выбор 2', но слишком медленно"
            jump menu2_end

label menu2_slow:
    e "Вы действительно не спешили и ничего не выбрали."
    
label menu2_end:
    e "Впрочем, давайте сделаем что-нибудь еще."

Если вы зациклились на замене бара с широким таймером обратного отсчета, вам будет необходимо видоизменить screen countdown следующим образом:

screen countdown:
    timer 1 repeat True action If(time > 0, true=SetVariable('time', time - 1), false=[Hide('countdown'), Jump(timer_jump)])
    if time <= 2:
        text str(time) xpos .1 ypos .1 color "#FF0000" at alpha_dissolve
    else:
        text str(time) xpos .1 ypos .1 at alpha_dissolve

Делает, чтобы цифры отсчитывали каждую секунду, например, 5, 4, 3, 2... Когда таймер обратного отсчета достигнет 2-х или меньше, цифра краснеет.

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

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


На главную страницу Книга рецептов Энциклопедии Ren'Py Книга рецептов Ren'Py Вернуться к началу статьи