Переходы (Transitions)

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

Переходы могут использоваться как часть оператора 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" на английском языке.


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