Как выделить говорящего и отодвинуть молчуна

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

Говорящий персонаж цветной, выдвигается к центру экрана, молчащий в данный момент собеседник отодвигается (если не стоит точно по центру) и обесцвечивается. Как бы теряет фокус. Сделано с помощью матрицы насыщенности. Есть пара проблем. Первое - персонаж и его выцветшая копия уже должны быть на экране (либо просто копия, но с псевдонимом, оканчивающимся на "_off"). Это решается вызовом $ init_char("имя_персонажа") перед самым диалогом. Второе - переход сделан с помощью прозрачности, поэтому персонажи становятся слегка бесплотными при переходах.

init:
    # на сколько пикселей выдвигаться
    $ xo = 32
    # перемещение и изменение прозрачности
    transform _t(a1, a2, xo1, xo2, xa = .5, delay = .5):
        xalign xa xoffset xo1 alpha a1 anchor(.5, 1.0)
        linear delay xoffset xo2 alpha a2
init python:
    # это запускать перед самым стартом диалога,
    # чтобы персонаж потом отображался на экране
    def init_char(char):
        renpy.show(char + "_off", what = char)
        renpy.show(char)
    # затемнение
    def show_off(char, xa = .5, delay = .5, mode_on = False):
        xo1, xo2 = (0, 0)
        a1, a2 = (1.0, .0)
        if xa < .5:
            xo2 = -xo
        if xa > .5:
            xo2 = xo
        if mode_on:
            a1, a2 = (a2, a1)
            xo1, xo2 = (xo2, xo1)
        renpy.show(char, at_list = [_t(a1, a2, xo1, xo2, xa, delay)])
        renpy.show(char + "_off", what = im.MatrixColor(char + ".png", im.matrix.saturation(.15)), at_list = [_t(a2, a1, xo1, xo2, xa, delay)])
    # высветление
    def show_on(char, xa = .5, delay = .5):
        show_off(char, xa, delay, True)
    # убрать персонажа с экрана
    def hide_char(char):
        renpy.hide(char)
        renpy.hide(char + "_off")
label start:
    scene bg1
    "Встретились два остолопа."
    # подготовка
    $ init_char("boy")
    $ init_char("girl")
    # пошел диалог
    $ show_on("boy", .33) # цветной тот, кто говорит
    $ show_off("girl", .66) # молчащего красим в серый и отодвигаем
    "Остолоп" "...А я говорю такой: «Оппа!»"
    $ show_off("boy", .33)
    $ show_on("girl", .66)
    "Остолопка" "Иди-ка поешь укропа."
    $ show_on("boy", .33)
    $ show_off("girl", .66)
    "Остолоп" "Ты кого назвала укропом!"
    $ show_on("girl", .66)
    "«Тяжело говорить с остолопом...»"
    $ hide_char("boy")
    $ hide_char("girl")
    with dissolve
    pause
    return

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