Переходы (Transitions)
Переходы могут использоваться как часть оператора with и в других частях Ren'Py для применения эффектов к изменениям в сцене. Ren'Py поставляется с небольшим количеством встроенных переходов, которые можно применять непосредственно с оператором with. Движок также включает классы переходов, которые можно использовать для создания новых переходов.
Встроенные переходы (Pre-Defined Transitions)[править | править код]
Встроенные в Ren'Py переходы можно применять непосредственно с оператором with. Например:
show bg washington
with dissolve
- fade
- Для перехода в чёрный цвет требуется 0.5 секунды, а для перехода к новому экрану – 0.5 секунды. Экземпляр класса перехода Fade().
- dissolve
- Для растворения старого экрана в новом требуется 0.5 секунды. Экземпляр класса перехода Dissolve().
- pixellate
- Применяет эффект пикселизации к старой сцене в течение 0.5 секунды, а проявление новой сцены занимает 0.5 секунды. Экземпляр класса перехода Pixellate().
- move
- Перемещение изображений, изменивших местоположение, занимает 0.5 секунды. Экземпляр класса перехода MoveTransition().
- moveinright
- Также: moveinleft, moveintop, moveinbottom
- Это движение выводит изображения на экран с соответствующей стороны.
- moveoutright
- Также: moveoutleft, moveouttop, moveoutbottom
- Это движение перемещает изображения за пределы экрана через соответствующую сторону за 0.5 секунды.
- ease
- Также: easeinright, easeinleft, easeintop, easeinbottom, easeoutright, easeoutleft, easeouttop, easeoutbottom
- Эти переходы схожи с семейством move, за исключением того, что они используют кривую на основе косинуса для замедления начала движения и окончания перехода.
- zoomin
- Увеличивает масштаб выводимых на экран изображений за 0.5 секунды.
- zoomout
- Уменьшает масштаб изображений с последующим исчезновением с экрана за 0.5 секунды.
- zoominout
- Увеличивает масштаб выводимых на экран изображений и уменьшает масштаб изображений с последующим исчезновением с экрана за 0.5 секунды.
- vpunch
- При вызове этот переход встряхивает экран в вертикальном направлении в течение четверти секунды.
- hpunch
- При вызове этот переход встряхивает экран в горизонтальном направлении в течение четверти секунды.
- blinds
- Переход экрана в виде вертикальных жалюзи, длящийся 1 секунду. Экземпляр класса перехода ImageDissolve().
- squares
- Переход экрана с помощью эффекта квадратов, длящийся 1 секунду.
- wipeleft
- Также: wiperight, wipeup, wipedown
- Стирает сцену в заданном направлении. Экземпляр класса перехода CropMove().
- slideleft
- Также: slideright, slideup, slidedown
- Сдвигает новую сцену в заданном направлении. Экземпляр класса перехода CropMove().
- slideawayleft
- Также: slideawayright, slideawayup, slideawaydown
- Сдвигает старую сцену в заданном направлении. Экземпляр класса перехода CropMove().
- pushright
- Также: pushleft, pushup, pushdown
- Использует новую сцену, чтобы сдвинуть старую сцену из названной стороны. Экземпляр класса перехода PushMove().
- irisin
- Также: irisout
- Использует прямоугольное окно для отображения нового экрана или скрытия старого. Экземпляр класса перехода CropMove().
Классы перехода (Transition Classes)[править | править код]
Классы перехода – функции, которые можно вызывать для создания новых переходов. Эти функции параметризованы, что позволяет создавать целые семейства переходов.
Вызов классов перехода может быть выполнен как часть оператора with. Например:
# Очень долгий эффект растворения.
with Dissolve(10.0)
Если мы неоднократно вызываем один и тот же класс перехода, мы можем использовать оператор define для назначения перехода переменной:
define annoytheuser = Dissolve(1.0)
label start:
show bg washington
with annoytheuser
- AlphaDissolve(control, delay=0.0, alpha=False, reverse=False)
- Возвращает переход, использующий отображаемый элемент управления (почти всегда какое-то анимированное преобразование) для перехода с одного экрана на другой. Проводится оценка преобразования. Новый экран используется там, где преобразование непрозрачно, а старое изображение используется, когда оно прозрачно.
- control
- Контрольное преобразование.
- delay
- Время, необходимое для перехода, до его окончания.
- alpha
- Игнорируется.
- reverse
- Если принимает значение True, то выполняется реверс альфа-канала. Непрозрачные области берутся из старого изображения, а прозрачные области берутся из нового.
- ComposeTransition(trans, before, after)
- Возвращает переход, который содержит до трех переходов. Если принимает значение не None, переходы before и after применяются к старой и новой сценам соответственно. Затем к этим обновленным сценам применяется перехода trans.
# Перемещает изображения внутрь и наружу при растворении (это довольно затратный переход). define moveinoutdissolve = ComposeTransition(dissolve, before=moveoutleft, after=moveinright)
- CropMove(time, mode="slideright", startcrop=(0.0, 0.0, 0.0, 1.0), startpos=(0.0, 0.0), endcrop=(0.0, 0.0, 1.0, 1.0), endpos=(0.0, 0.0), topnew=True)
- Возвращает переход, который работает путём обрезки сцены и позиционирования её на экране. Может быть использован для реализации различных эффектов, каждый из которых включает в себя изменение прямоугольных фрагментов сцен.
- time
- Время, отведенное для перехода.
- mode
- Название режима перехода. Есть три группы режимов: вытеснение, слайды и другие. Это также может быть "custom", чтобы позволить определить пользовательский режим.
- Во время вытеснения изображение остается и по мере продвижения перехода становится всё больше. Например, в режиме "wiperight", вытеснение слева направо, сначала левый край изображения отображается у левого края экрана, затем центр изображения и, наконец, правая сторона изображения в правой части экрана. Также поддерживаются режимы перехода "wipeleft", "wipedown" и "wipeup".
- При применении режима слайда перемещается изображение. Так, в случае применения "slideright", правый край изображения начинает сдвигаться с левого края экрана и перемещается вправо в процессе перехода. Также поддерживаются режимы перехода "slideleft", "slidedown" и "slideup".
- Есть также подгруппа "slideaway" режима "slide", в которой старое изображение перемещается поверх нового изображения. Slideaway включают в себя "slideawayright", "slideawayleft", "slideawayup" и "slideawaydown".
- Движок также поддерживает режимы "irisin" (во внутрь) и "irisout" (наружу), использующие прямоугольное окно для отображения нового экрана или скрытия старого.
- Следующие параметры учитываются только в режиме "custom". Позиции указываются относительно размера экрана, в то время как кадрирование выполняется относительно размера изображения. Таким образом, кадрирование (0.25, 0.0, 0.5, 1.0) занимает среднюю половину изображения.
- startcrop
- Начальная прямоугольная область на экране, вырезанная из верхнего изображения. Четырехэлементный кортеж, содержащий координаты x, y, ширину и высоту изображения.
- startpos
- Начальная область, в которой верхнее изображение выводится на экран. Двухэлементный кортеж, содержащий координаты x и y.
- endcrop
- Итоговая прямоугольная область, вырезанная из верхнего изображения. Четырехэлементный кортеж, содержащий координаты x, y, ширину и высоту изображения.
- endpos
- Итоговая область, в которой верхнее изображение выводится на экран. Двухэлементный кортеж, содержащий координаты x и y.
- topnew
- Если принимает значение True, сцена, которая обрезается и перемещается (и находится поверх другой сцены). Является новой сценой. Если принимает значение False, это старая сцена.
define wiperight = CropMove(1.0, "wiperight") define wipeleft = CropMove(1.0, "wipeleft") define wipeup = CropMove(1.0, "wipeup") define wipedown = CropMove(1.0, "wipedown") define slideright = CropMove(1.0, "slideright") define slideleft = CropMove(1.0, "slideleft") define slideup = CropMove(1.0, "slideup") define slidedown = CropMove(1.0, "slidedown") define slideawayright = CropMove(1.0, "slideawayright") define slideawayleft = CropMove(1.0, "slideawayleft") define slideawayup = CropMove(1.0, "slideawayup") define slideawaydown = CropMove(1.0, "slideawaydown") define irisout = CropMove(1.0, "irisout") define irisin = CropMove(1.0, "irisin")
- Dissolve(time, alpha=False, time_warp=None)
- Возвращает переход, который растворяется от старой сцены к новой.
- time
- Время, которое займет растворение.
- alpha
- Игнорируется.
- time_warp
- Функция, которая регулирует временную шкалу. Если установлено значение не None, то это должна быть функция, которая занимает дробное время между 0.0 и 1.0 и возвращает число в том же диапазоне.
- Fade(out_time, hold_time, in_time, color="#000")
- Возвращает переход, который занимает out_time секунды для перехода к экрану, заполненному color, удерживается на этом экране в течение hold_time секунд, а затем занимает in_time, чтобы исчезнуть на новом экране.
# Затемнение в черный и обратно. define fade = Fade(0.5, 0.0, 0.5) # Удержание в черном на некоторое время. define fadehold = Fade(0.5, 1.0, 0.5) # Вспышка камеры - быстрый переход в белый, а затем назад к сцене. define flash = Fade(0.1, 0.0, 0.5, color="#fff")
- ImageDissolve(image, time, ramplen=8, reverse=False, alpha=True, time_warp=None)
- Возвращает переход, который растворяет старую сцену в новую, используя изображение для управления процессом растворения. Это означает, что белые пиксели будут растворяться в первую очередь, а после растворятся чёрные пиксели.
- image
- Элемент управления изображением для использования. Это должен быть либо файл изображения, либо манипулятор изображений. Элемент управления изображением должен быть размером с растворяемые сцены.
- time
- Время, которое займет растворение.
- ramplen
- Длина рампы для использования. Это должно быть целое число, равное 2. Когда это значение по умолчанию равно 8, когда белый пиксель полностью растворён, пиксель 8 оттенков серого темнее завершит один шаг растворения.
- reverse
- Если принимает значение True, чёрные пиксели будут растворяться раньше белых пикселей.
- alpha
- Игнорируется.
- time_warp
- Функция, которая регулирует временную шкалу. Если установлено значение не None, то это должна быть функция, которая занимает дробное время между 0.0 и 1.0 и возвращает число в том же диапазоне.
define circirisout = ImageDissolve("circiris.png", 1.0) define circirisin = ImageDissolve("circiris.png", 1.0, reverse=True) define circiristbigramp = ImageDissolve("circiris.png", 1.0, ramplen=256)
- MoveTransition(delay, enter=None, leave=None, old=False, layers=['master'], time_warp=None, enter_time_warp=None, leave_time_warp=None)
- Возвращает переход, который интерполирует положение изображений (с тем же тегом) в старых и новых сценах.
- delay
- Время, необходимое для завершения интерполяции.
- enter
- Если принимает значение не None, изображения, появляющиеся на сцене, будут также перемещены. Значение enter должно быть преобразованием, которое применяется к изображению для получения его исходного положения.
- leave
- Если принимает значение не None, изображения, покидающие сцену, также будут перемещены. Значение leave должно быть преобразованием, которое применяется к изображению для получения его конечной позиции.
- old
- Если принимает значение True, старое изображение будет использоваться вместо нового.
- layers
- Список слоёв, к которым применяются перемещения.
- time_warp
- Функция деформации времени, применяемая к интерполяции. Принимает значение от 0.0 и 1.0, и должно возвращать число в том же диапазоне.
- enter_time_warp
- Функция деформации времени, применяемая к изображениям, появляющимся на сцене.
- leave_time_warp
- Функция деформации времени, применяемая к изображениям, покидающим сцену,
- MultipleTransition(args)
- Возвращает переход, позволяющий отображать несколько переходов, один за другим.
- args
- Список, содержащий нечетное количество элементов. Первый, третий и другие нечетные элементы должны быть сценами, а четные элементы – переходами. Сцена может быть одним из:
- отображаемым объектом.
- значением False, чтобы использовать старую сцену.
- значением True, чтобы использовать новую сцену.
- Почти всегда первым аргументом будет False, а последним - True.
- Переходы в args применяются по порядку. Для каждого перехода старая сцена – экран, предшествующий ей, а новая сцена – следующая за ней сцена. Например:
define logodissolve = MultipleTransition([ False, Dissolve(0.5), "logo.jpg", Pause(1.0), "logo.jpg", dissolve, True])
- В этом примере демонстрируется растворение изображения logo.jpg с задержкой в 1 секунду и растворением в новой сцене.
- Pause(delay)
- Возвращает переход, который отображает новый экран только в течение нескольких delay секунд. Это может быть полезно как часть MultipleTransition.
- Pixellate(time, steps)
- Возвращает переход, который который применяет эффект пикселизации старого экрана в новый.
- time
- Общее время перехода в секундах.
- steps
- Количество шагов, которые будут происходить в каждом направлении. Каждый шаг создаёт пиксели примерно в два раза больше, чем на предыдущем шаге, поэтому пикселизация в 5 шагов создаст 32x32 пикселей.
- PushMove(time, mode="pushright")
- Возвращает переход, который работает, взяв новую сцену и используя её, чтобы «вытолкнуть» старую сцену с экрана.
- time
- Время, которое занимает переход.
- mode
- Существует четыре возможных режима: «pushright», «pushleft», «pushup» и «pushdown», которые выталкивают старую сцену с экрана в указанном направлении.
define pushright = PushMove(1.0, "pushright") define pushleft = PushMove(1.0, "pushleft") define pushup = PushMove(1.0, "pushup") define pushdown = PushMove(1.0, "pushdown")
Семейства перехода (Transition Families)[править | править код]
Семейства перехода – функции, определяющие большое семейство связанных переходов.
define.move_transitions(prefix, delay, time_warp=None, in_time_warp=None, out_time_warp=None, old=False, layers=[u'master'], **kwargs)
- Определяет семейство переходов перемещения, аналогичных переходам move и ease. Определяет переходы для заданного prefix:
- prefix
- – переход, который занимает delay секунд для перемещения изображений со старой позиции на новую.
- prefixinleft, prefixinright, prefixintop, prefixinbottom
- – переходы, которые занимают delay секунд для перемещения изображений со старой позиции на новую, а также недавно показанных изображений, появляющихся с соответствующей стороны.
- prefixoutleft, prefixoutright, prefixouttop, prefixoutbottom
- – переходы, которые занимают delay секунд для перемещения изображений со старой позиции на новую, а также недавно скрытых изображений, исчезнувшие с экрана через соответствующую сторону.
- time_warp, in_time_warp, out_time_warp
- Функции деформация времени, которые задают время в интервале от 0.0 до 1.0, представляющее собой часть завершения перемещения, и возвращают значение в том же диапазоне, предоставляющее завершающую часть линейного перемещения.
- Можно использовать для определения функций, облегчающих перемещение изображений, а не для перемещения их с постоянной скоростью.
- Эти три аргумента используются для изображений, оставшихся на экране, недавно отображенных и вновь скрытых изображений соответственно.
- old
- Если принимает значение True, переходы для перемещения старых отображаемых объектов, а не новых.
- layers
- Слои, к которым будет применён переход.
# Определяет все заранее определенные переходы, начинающиеся # с "move". init python: define.move_transitions("move", 0.5)
Словарь переходов (Dict Transitions)[править | править код]
Во многих местах, где Ren'Py выполняет переход, можно вместо этого указать словарь, который сопоставляет имена слоёв с этим переходом. В этом случае Ren'Py применяет каждый переход к соответствующему слою.
При использовании словаря пауза, обычно возникающая при переходе, не происходит. Вместо этого оператор, принимающий словарь, немедленно возвращается и переходы планируются произойти в начале следующего взаимодействия.
Это можно использовать с основным слоем, чтобы вызвать переходы во время отображения диалога на экране. Например, если мы пропишем:
define dis = { "master" : Dissolve(1.0) }
и
show eileen happy
with dis
e "Привет, мир."
Растворение происходит во время отображения текста на экране.
Словарь переходов слоя нельзя использовать везде, где можно использовать переход, только в тех местах, где возможно применение переходов к слою. Он может использоваться с оператором with и with, связанным с операторами scene, show и hide. Он также может быть использован с renpy.with_statement() и renpy.transition(), действиями Show() и Hide(), а также различными переменными конфигурации, которые принимают переходы. Словарь переходов слоя не будет работать внутри элементов, которые не работают со слоями, такими как ATL, ComposeTransition() и MultipleTransition().
Это может плохо взаимодействовать с операторами, которые сами вызывают переход, например, переходы, вызванные window auto. Это часто можно решить с помощью второго словаря перехода, который применяется к другому слою. Например, если вы видите странное мигание, когда диалоговое окно показывается и скрывается, рассмотрите возможность изменения options.rpy:
define config.window_show_transition = { "screens" : Dissolve(.25) }
define config.window_hide_transition = { "screens" : Dissolve(.25) }
Это работает, потому что диалоговое окно существует полностью на слое экранов.
Источник[править | править код]
Статья "Transitions" на английском языке.
На главную страницу | Официальная документация движка | Вернуться к началу статьи |