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

Говорящий персонаж цветной, увеличен на 5%, молчащий в данный момент собеседник уменьшается до 100% и обесцвечивается. Как бы теряет фокус. Сделано с помощью матрицы насыщенности.



init:
    # на сколько увеличивать
    $ zo = 1.05
    # за какое время
    $ t_delay = .25

    # перемещение и изменение размера
    transform t_on(xa=.5, z=zo, delay=t_delay):
        align (xa, 1.0) zoom 1.00001 anchor (.5, 1.0)
        easein delay zoom z

    transform t_off(xa=.5, z=zo, delay=t_delay):
        align (xa, 1.0) zoom z anchor (.5, 1.0)
        easeout delay zoom 1.00001

init python:
    # высветление
    def show_on(char, xa=.5, z=zo, delay=t_delay):
        renpy.show(char, at_list=[t_on(xa, z, delay)])

    # затемнение
    def show_off(char, xa=.5, z=zo, delay=t_delay):
        renpy.show(char, what=im.MatrixColor(char + ".png", im.matrix.saturation(.15)), at_list=[t_off(xa, z, delay)])

    # убрать персонажа/персонажей с экрана
    def hide_char(*args):
        for i in args:
            renpy.hide(i)

label start:
    scene bg1
    "Встретились два остолопа."

    # пошел диалог
    $ 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, zo, 1.0)
    "«Тяжело говорить с остолопом...»"

    $ hide_char("boy", "girl")
    with dissolve
    pause
    return

Комментарии

  1. Спасибо, как раз искал что-то подобное. Соединил немного твоего кода с вот этим:https://www.renpy.org/wiki/renpy/doc/cookbook/Blink_And_Lip_Flap
    Вышло прикольно
    init python:

    speaking = None
    def while_speaking(name, speak_d, done_d, st, at):
    if speaking == name:
    return speak_d, None
    else:
    return done_d, None
    curried_while_speaking = renpy.curry(while_speaking)
    def WhileSpeaking(name, speaking_d):
    done_d = im.MatrixColor(speaking_d,im.matrix.saturation(.4))
    return DynamicDisplayable(curried_while_speaking(name, speaking_d, done_d))
    def speaker_callback(name, event, **kwargs):
    global speaking
    if event == "show":
    speaking = name
    elif event == "slow_done":
    speaking = None
    elif event == "end":
    speaking = None
    speaker = renpy.curry(speaker_callback)
    init:
    define ph = Character("Пахом", callback=speaker("ph"))
    image ph normal = WhileSpeaking("ph", "images/pahom.png")


    label start:
    show ph normal
    "тишина"

    ph"азазазаза"
    "молчит"
    ph"лоооооооооооол"
    return

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

      Удалить
    2. Ебать вы пидор, СЭР! Мало того что не можете создать автоматическую версию приближения - отдаления спрайта. А создаете кусок дерьма, который требует постоянного вызова двух бесполезных функций, в которых постоянно приходится следить какой персонаж оффнут, а какой нет , еще и блядь координаты им прописывать лол.
      Приближение - отдаление должно быть привязано к персонажу и работать автоматически у нормального программиста.
      По этому пройдите нахуй, тупая вы тварь! =)

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

    init python:

    speaking = None
    def while_speaking(name, speak_d, done_d, st, at):
    if speaking == name:
    return speak_d, None
    else:
    return done_d, None
    curried_while_speaking = renpy.curry(while_speaking)
    def WhileSpeaking(name, speaking_d):
    done_d = im.MatrixColor(speaking_d,im.matrix.saturation(.4))
    return DynamicDisplayable(curried_while_speaking(name, speaking_d, done_d))
    def speaker_callback(name, event, **kwargs):
    global speaking
    if event == "show":
    speaking = name
    elif event == "slow_done":
    speaking = None
    elif event == "end":
    speaking = None
    speaker = renpy.curry(speaker_callback)
    init:
    define ph = Character("Пахом", callback=speaker("ph"))
    image ph normal = WhileSpeaking("ph", "images/boy.png")


    label start:
    show ph normal
    "тишина"

    ph"азазазаза"
    "молчит"
    ph"лоооооооооооол"
    return

    ОтветитьУдалить
  4. Сорри сообщение удаляет пробелы в начале строчки потому пример не получилось кинуть((((

    ОтветитьУдалить

Отправить комментарий