Язык анимации и преобразования (Animation and Transformation Language)
Язык анимации и преобразования (далее – ATL) предусматривает множество вариантов выведения на экран отображаемого объекта, его расположение на экране и применения таких преобразований, как вращение, масштабирование и изменение прозрачности (альфа-модификация). Они могут быть изменены по истечении установленного времени и как следствие выполнения определенного события.
Эквивалентом преобразования ATL в языке программирования Python является Transform(). Нет способа создать ATL-преобразование программно.
Основные операторы скрипта Ren'Py (Ren'Py Script Statements)[править | править код]
ATL может быть включён в состав трех операторов скрипта Ren'Py:
- Оператор transform
- Создаёт преобразование, которое может являться составной частью at. Синтаксис оператора transform:
atl_transform ::= "transform" name "(" parameters ")" ":" atl_block
- Оператор transform должен выполняться во время инициализации. Если он находится вне блока init, он автоматически помещается в блок init с приоритетом 0. Преобразование может иметь список параметров, которые должны быть указаны при его вызове.
- name должно быть идентификатором в Python. Преобразование, созданное блоком ATL, будет вызываться через это имя. Например:
transform left_to_right: xalign 0.0 linear 2.0 yalign 1.0 repeat
- Оператор image с блоком ATL
- Второй способ использовать ATL – как часть оператора image с блоком ATL. Связывает имя изображения с данным преобразованием. Поскольку нет способа предоставить параметры для этого преобразования, оно полезно только в том случае, если преобразование определяет анимацию. Синтаксис оператора image с блоком ATL выглядит следующим образом:
atl_image ::= "image" image_name ":" atl_block
- Пример:
image eileen animated: "eileen_happy.png" pause 1.0 "eileen_vhappy.png" pause 1.0 repeat
- Операторы scene и show с блоком ATL
- Последний способ использования ATL – как часть оператора scene или show. Охватывает изображение, отображаемое внутри преобразования ATL.
atl_scene ::= stmt_scene ":" atl_block atl_show ::= stmt_show ":" atl_block
- Пример:
scene bg washington: zoom 2.0 show eileen happy: xalign 1.0
Синтаксис и семантика ATL (ATL Syntax and Semantics)[править | править код]
Блок ATL состоит из одной или нескольких логических строк с одинаковым отступом и отступом относительно оператора, содержащего блок. Каждая логическая строка в блоке ATL должна содержать один или несколько операторов ATL.
Есть два вида операторов ATL:
- Простые.
- Обходятся без блока ATL. Одна логическая строка может содержать один или несколько операторов ATL, разделенных запятыми.
- Сложные.
- Содержит блок, каждый оператор которого располагается на отдельной строке. Первая строка сложного оператора всегда заканчивается двоеточием.
По умолчанию операторы в блоке выполняются в том порядке, в котором они появляются, начиная с первого оператора в блоке. Выполнение завершается по достижении конца блока. Однако этот порядок изменяет оператор time, описанный в соответствующем разделе ниже.
Выполнение блока завершается, когда завершены все операторы в блоке.
Если оператор ATL требует вычисления выражения, такое вычисление происходит при первом добавлении преобразования в список сцен. Например, при использовании оператора show или функции ui.
Операторы ATL (ATL Statements)[править | править код]
Ниже приведены операторы ATL.
◇ Оператор interpolation[править | править код]
Является основным способом, которым ATL управляет преобразованиями.
atl_interp ::= ( warper simple_expression | "warp" simple_expression simple_expression )?
( property simple_expression ( "knot" simple_expression )*
| "clockwise"
| "counterclockwise"
| "circles" simple_expression
| simple_expression )*
Первая часть оператора interpolation используется для выбора функции изменения времени данной интерполяции, то есть выбор линейного течения времени или нет. Это можно сделать, указав имя функции warper, зарегистрированной в ATL, или указав ключевое слово "warp", за которым следует выражение, включающее функцию. В обоих случаях это сопровождается числом, соответствующим количеству секунд, которое должна занять интерполяция.
Если функция warp не задана, интерполяция происходит мгновенно. Иначе она сохраняется в течение указанного времени и, по крайней мере, одного кадра.
Функция warper и продолжительность времени используются для вычисления доли завершения интерполяции. Это делается путём деления времени, затрачиваемого на интерполяцию, на продолжительность интерполяции. Это ограничивается продолжительностью, а затем передаётся функции warper. Результат, возвращаемый функцией warper, – это доля завершения.
Оператор interpolation может содержать ряд других компонентов. Когда присутствуют свойство и значение, то значение – значение, которое свойство получит в конце оператора. Значение может быть получено несколькими способами:
- Если за значением следуют одна или две узловых точек, то используется сплайновое движение. Начальная точка – значение свойства в начале интерполяции, конечная точка – значение свойства, а узловые точки используются для управления сплайном.
- Если оператор interpolation использует "clockwise" или "counterclockwise", используется круговое движение, как описано ниже.
- Иначе используется движение по прямой между указанными координатами начала и конца интерполяции.
Если присутствует простое выражение, оно должно преобразовываться только с одним оператором interpolation, без функции warper, сплайнов или кругового движения. Свойства из преобразования обрабатываются так, как если бы они были включены в этот оператор.
Несколько примеров интерполяции:
show logo base:
# Покажет логотип в верхней правой части экрана.
xalign 1.0 yalign 0.0
# Использует 1.0 секунды, чтобы переместить всё влево.
linear 1.0 xalign 0.0
# Использует 1.0 секунды, чтобы переместить элементы в место, указанное в
# преобразование truecenter. Для этого используется ease функции warper.
ease 1.0 truecenter
# Сделает паузу на секунду
pause 1.0
# Укажет точку, которая будет являться центром вращения.
alignaround (.5, .5)
# Использует круговое движение, чтобы вывести нас по спирали к верхней части экрана.
# Для этого потребуется 2 секунды.
linear 2.0 yalign 0.0 clockwise circles 3
# Использует сплайновое движение, чтобы переместить нас по экрану.
linear 2.0 align (0.5, 1.0) knot (0.0, .33) knot (1.0, .66)
Важным частным случаем является то, что деформация паузы, зависимая только от времени, заставляет выполнение ATL приостанавливаться на это время.
Некоторые свойства могут иметь значения нескольких типов. Например, свойство
xpos может быть целым числом, числом с плавающей точкой или абсолютным. Поведение не определено, когда интерполяция имеет старые и новые значения свойств разных типов.
◇ Оператор time[править | править код]
Оператор time является простым оператором управления. Он содержит единственное выражение simple_expression, которое вычисляется, чтобы дать время, выраженное в секундах с начала выполнения содержащего блока.
atl_time ::= "time" simple_expression
По истечении времени, указанного в операторе, начинает выполняться следующий оператор. Эта передача управления происходит, даже если предыдущий оператор всё еще выполняется, приводит к немедленному завершению любого предыдущего оператора.
Оператор time неявно предшествует оператор pause с бесконечным временем выполнения. Это означает, что если управление иным образом достигнет оператора time, то оно будет ждать, пока оператор time не возьмет управление на себя.
При наличии нескольких операторов time в одном блоке, они должны выполняться строго в заданном порядке.
image backgrounds:
"bg band"
time 2.0
"bg whitehouse"
time 4.0
"bg washington"
◇ Оператор expression[править | править код]
Оператор expression – простой оператор, начинающийся с простого выражения. Затем он содержит необязательный элемент with со вторым простым выражением.
atl_expression ::= simple_expression ("with" simple_expression)?
Есть три вещи, к которым может привести первое простое выражение:
- Если это преобразование, оно выполняется. With игнорируются при преобразование.
- Если это целое число или число с плавающей точкой, оно занимает несколько секунд, чтобы приостановить выполнение кода.
- Иначе выражение интерпретируется как отображаемый объект. Он заменяет дочерний элемент преобразования при выполнении этого выражения, что делает его полезным для анимации. Если присутствует with, второе выражение оценивается как переход, и переход применяется к старым и новым отображаемым объектам.
image atl example:
# Покажет logo_base.png
"logo_base.png"
# Пауза на 1.0 секунды.
1.0
# Покажет logo_bw.png с переходом dissolve.
"logo_bw.png" with Dissolve(0.5, alpha=True)
# Запустит преобразование move_right.
move_right
◇ Оператор pass[править | править код]
atl_pass ::= "pass"
Оператор pass – простой оператор, который ничего не вызывает. Его можно использовать, когда есть желание разделить операторы, например, когда есть два набора операторов choice, которые в ином случае были бы последовательными.
◇ Оператор repeat[править | править код]
Оператор repeat – простой оператор, который заставляет блок, содержащий его, возобновить выполнение с самого начала. Если присутствует выражение, оно вычисляется, чтобы задать целое число раз, когда блок будет выполняться. Таким образом, блок, заканчивающийся строкой repeat 2, будет выполнен не более двух раз.
atl_repeat ::= "repeat" (simple_expression)?
Оператор repeat должен быть последним оператором в блоке:
show logo base:
xalign 0.0
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
◇ Оператор block[править | править код]
Оператор block – сложный оператор, который содержит блок операторов ATL. Его можно использовать для группировки операторов, которые будут повторяться.
atl_block_stmt ::= "block" ":"
atl_block
Например:
label logo base:
alpha 0.0 xalign 0.0 yalign 0.0
linear 1.0 alpha 1.0
block:
linear 1.0 xalign 1.0
linear 1.0 xalign 0.0
repeat
◇ Оператор choice[править | править код]
Оператор choice – сложный оператор, который определяет один из возможных вариантов выбора. Ren'Py выберет один из вариантов в наборе и выполнит связанный с ним блок ATL, а затем продолжит выполнение кода после последнего выбора в наборе вариантов.
atl_choice ::= "choice" (simple_expression)? ":"
atl_block
Операторы choice принудительно сгруппированы в набор вариантов, когда в блоке последовательно появляется несколько операторов choice. Если задано выражение simple_expression, то этому блоку присваивается приоритет с плавающей точкой, иначе предполагается значение 1.0.
image eileen random:
choice:
"eileen happy"
choice:
"eileen vhappy"
choice:
"eileen concerned"
pause 1.0
repeat
◇ Оператор parallel[править | править код]
Оператор parallel используется для определения набора блоков ATL для параллельного выполнения.
atl_parallel ::= "parallel" ":"
atl_block
Операторы parallel принудительно группируются в параллельный набор, когда в блоке последовательно появляется несколько операторов parallel. Затем блоки всех операторов parallel выполняются одновременно. Оператор parallel завершается, когда завершается последний блок.
Блоки внутри набора должны быть независимы друг от друга и управлять различными свойствами. Когда два блока изменяют одно и то же свойство, то конечный результат определить невозможно.
show logo base:
parallel:
xalign 0.0
linear 1.3 xalign 1.0
linear 1.3 xalign 0.0
repeat
parallel:
yalign 0.0
linear 1.6 yalign 1.0
linear 1.6 yalign 0.0
repeat
◇ Оператор event[править | править код]
Оператор event – простой оператор, который вызывает событие с заданным именем.
atl_event ::= "event" name
Когда событие создаётся внутри блока, блок проверяется на наличие обработчика событий для данного имени. Если это так, управление передается обработчику событий. Иначе событие распространяется на любой содержащий обработчик события.
◇ Оператор on[править | править код]
Оператор on – сложный оператор, который определяет обработчик событий. Операторы on принудительно группируются в один оператор. Оператор on может обрабатывать одно имя события или список имён событий, разделенный запятыми.
atl_on ::= "on" name [ "," name ] * ":"
atl_block
Оператор on используется для обработки событий. Когда событие обрабатывается, обработка любых других событий заканчивается и немедленно начинается обработка нового события. Когда обработчик события завершается и кроме него в очереди больше нет никаких других обрабатываемых событий, создается событие default, если только оно уже не обрабатывало событие default.
Выполнение оператора on никогда не закончится самостоятельно, но оно может быть завершено оператором time или обработчиком события.
show logo base:
on show:
alpha 0.0
linear .5 alpha 1.0
on hide:
linear .5 alpha 0.0
transform pulse_button:
on hover, idle:
linear .25 zoom 1.25
linear .25 zoom 1.0
◇ Оператор contains[править | править код]
Оператор contains задаёт отображаемый объект, содержащийся в этом преобразовании ATL (дочерний элемент преобразования). Есть два варианта этого оператора.
Вариант оператора contains принимает выражение и устанавливает его как дочерний элемент преобразования. Это полезно, когда преобразование ATL желает содержать в себе, а не включать в себя, второе преобразование ATL.
atl_contains ::= "contains" expression
Например:
transform an_animation:
"1.png"
pause 2
"2.png"
pause 2
repeat
image move_an_animation:
contains an_animation
# Если бы мы не использовали contains, мы до сих пор бы выполняли цикл
# и никогда бы не добрались сюда.
xalign 0.0
linear 1.0 yalign 1.0
Блок оператора contains позволяет определить блок ATL, который используется для дочернего элемента этого преобразования ATL. Один или несколько блоков оператора contains будут принудительно сгруппированы вместе, помещены в Fixed() и заданы как дочерние элементы этого преобразования.
atl_counts ::= "contains" ":"
Каждый блок должен определить, что он будет отображать, иначе произойдет ошибка. Оператор contains выполняется мгновенно, не дожидаясь завершения работы дочерних элементов. Этот оператор в основном является синтаксическим сахаром, поскольку позволяет легко передавать аргументы дочерним элементам.
image test double:
contains:
"logo.png"
xalign 0.0
linear 1.0 xalign 1.0
repeat
contains:
"logo.png"
xalign 1.0
linear 1.0 xalign 0.0
repeat
◇ Оператор function[править | править код]
Оператор function позволяет ATL использовать функции Python для управления свойствами ATL.
atl_function ::= "function" expression
Функции имеют ту же сигнатуру, что и функции, используемые в Transform():
- Первый аргумент – объект преобразования. Для этого объекта можно задать свойства преобразования.
- Второй аргумент – показанная система отсчёта времени, количество секунд, прошедшее с того момента, как функция начала выполняться.
- Третий аргумент – временной интервал анимации, который представляет собой количество секунд, в течение которых что-то с тем же тегом было на экране.
- Если функция возвращает число, оно будет вызвано снова по истечении этого количества секунд. 0 секунд означает вызов функции как можно скорее. Если функция возвращает None, управление переходит к следующему оператору ATL.
init python:
def slide_function(trans, st, at):
if st > 1.0:
trans.xalign = 1.0
return None
else:
trans.xalign = st
return 0
label start:
show logo base:
function slide_function
pause 1.0
repeat
Функция warper (Warpers)[править | править код]
Функция Warper – функция, которая может изменять количество времени, которое, по мнению оператора interpolation, истекло. Следующие функции warper определены по умолчанию. Они определяются как функции от t to t', где t и t' – числа с плавающей точкой, причём t находится в диапазоне от 0.0 до 1.0 в течение заданного промежутка времени. Если продолжительность оператора 0, то t равен 1.0, когда он выполняется. t' начинаться с 0.0 и заканчиваться на 1.0, но может быть больше или меньше.
- pause
- Сделает паузу, а затем перейдёт к новому значению. Если t == 1.0, то t = 1.0. Иначе t' = 0.0.
- linear
- Линейная интерполяция. t' = t
- ease
- Начинается медленно, ускоряется, затем замедляйте. t' = .5 - math.cos(math.pi * t) / 2.0
- easein
- Начинается быстро, затем замедляется. t' = math.cos((1.0 - t) * math.pi / 2.0
- easeout
- Начинается медленно, затем ускоряется. t' = 1.0 - math.cos(t * math.pi / 2.0)
Кроме того, поддерживается большинство функций замедления Роберта Пеннера. Чтобы имена соответствовали приведенным выше, функции были несколько переименованы. Графики этих стандартных функций можно найти на http://www.easings.net/.
Имена в Ren'Py | Имена easings.net |
---|---|
ease_back | easeInOut_back |
ease_bounce | easeInOut_bounce |
ease_circ | easeInOut_circ |
ease_cubic | easeInOut_cubic |
ease_elastic | easeInOut_elastic |
ease_expo | easeInOut_expo |
ease_quad | easeInOut_quad |
ease_quart | easeInOut_quart |
ease_quint | easeInOut_quint |
easein_back | easeOut_back |
easein_bounce | easeOut_bounce |
easein_circ | easeOut_circ |
easein_cubic | easeOut_cubic |
easein_elastic | easeOut_elastic |
easein_expo | easeOut_expo |
easein_quad | easeOut_quad |
easein_quart | easeOut_quart |
easein_quint | easeOut_quint |
easeout_back | easeIn_back |
easeout_bounce | easeIn_bounce |
easeout_circ | easeIn_circ |
easeout_cubic | easeIn_cubic |
easeout_elastic | easeIn_elastic |
easeout_expo | easeIn_expo |
easeout_quad | easeIn_quad |
easeout_quart | easeIn_quart |
easeout_quint | easeIn_quint |
Новые функции warper можно определить с помощью декоратора renpy.atl_warper в блоке python early. Он должен быть помещён в файл, который анализируется перед любым файлом, использующим функцию warper. Код выглядит следующим образом:
python early hide:
@renpy.atl_warper
def linear(t):
return t
Список свойств преобразования (List of Transform Properties)[править | править код]
Существуют следующие свойства преобразования.
Когда тип задается как позиция, это может быть целое число или число с плавающей точкой, а также renpy.absolute. Если это число с плавающей точкой, оно интерпретируется как доля от размера охватывающей его области (для pos) или отображаемого объекта (для anchor).
Обратите внимание, что не все свойства являются независимыми. Например, xalign и xpos оба обновляют одни и те же базовые данные. В операторе parallel только один блок должен регулировать горизонтальное положение, а один – вертикальное. Это может быть один и тот же блок. Свойства угла и радиуса устанавливают как горизонтальное, так и вертикальное положение.
- pos
- Тип: (позиция, позиция)
- По умолчанию: (0, 0)
- Положение относительно верхнего левого угла охватывающей области.
- xpos
- Тип: позиция
- По умолчанию: 0
- Горизонтальное положение относительно левой стороны охватывающей области.
- ypos
- Тип: позиция
- По умолчанию: 0
- Вертикальное положение относительно верхней части охватывающей области.
- anchor
- Тип: (позиция, позиция)
- По умолчанию: (0, 0)
- Положение привязки относительно верхнего левого угла отображаемого объекта.
- xanchor
- Тип: позиция
- По умолчанию: 0
- Горизонтальное положение привязки относительно левой стороны отображаемого объекта.
- yanchor
- Тип: позиция
- По умолчанию: 0
- Вертикальное положение привязки относительно верхней части отображаемого объекта.
- align
- Тип: (число с плавающей точкой, число с плавающей точкой)
- По умолчанию: (0.0, 0.0)
- Эквивалентно установке pos и anchor на одно и то же значение.
- xalign
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Эквивалентно установке xpos и xanchor этому значению.
- yalign
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Эквивалентно установке ypos и yanchor этому значению.
- xoffset
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Количество пикселей отображаемого объекта смещаются в горизонтальном направлении. Положительные значения смещают вправо.
- yoffset
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Количество пикселей отображаемого объекта смещаются в вертикальном направлении. Положительные значения смещают вниз.
- xcenter
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Эквивалентно тому, что для xpos установлено значение этого свойства, а для xanchor - 0,5.
- ycenter
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Эквивалентно тому, что для ypos установлено значение этого свойства, а для yanchor - 0,5.
- rotate
- Тип: число с плавающей точкой или значение None
- По умолчанию: None
- Если принимает значение None, вращение не происходит. Иначе изображение будет повернуто по часовой стрелке на указанное количество градусов. Вращение отображаемого объекта приводит к изменению его размера в зависимости от настройки rotate_pad. Это может привести к изменению расположения, если xanchor и yanchor не 0.5.
- rotate_pad
- Тип: логическое значение
- По умолчанию: True
- Если принимает значение True, то вращаемый отображаемый объект обрабатывается таким образом, что ширина и высота равны гипотенузе исходной ширины и высоты. Это гарантирует, что преобразование не изменит размер при вращении его содержимого. Если принимает значение False, преобразованию будет присвоен минимальный размер, содержащий преобразованный отображаемый объект. Это больше подходит для фиксированных вращений.
- transform_anchor
- Тип: логическое значение
- По умолчанию: False
- Если принимает значение True, точка привязки находится на обрезанном дочернем элементе и масштабируется и поворачивается при преобразовании дочернего элемента. По сути, это делает привязку точкой, вокруг которой дочерний элемент вращается и масштабируется.
- zoom
- Тип: число с плавающей точкой
- По умолчанию: 1.0
- Приводит к увеличению отображаемого изображения на заданный коэффициент.
- xzoom
- Тип: число с плавающей точкой
- По умолчанию: 1.0
- Приводит к горизонтальному масштабированию отображаемого объекта с помощью заданного коэффициента. Отрицательное значение приводит к тому, что изображение переворачивается по горизонтали.
- yzoom
- Тип: число с плавающей точкой
- По умолчанию: 1.0
- Приводит к вертикальному масштабированию отображаемого объекта с помощью заданного коэффициента. Отрицательное значение приводит к тому, что изображение переворачивается вертикально.
- nearest
- Тип: логическое значение
- По умолчанию: None
- Если принимает значение True, отображаемый объект и его дочерние элементы рисуются с использованием фильтрации ближайших соседей. Если принимает значение False, отображаемый объект и его дочерние элементы рисуются с помощью билинейной фильтрации. Если принимает значение None, наследуется от родителя или config.nearest_neighbor, который по умолчанию принимает значение False.
- alpha
- Тип: число с плавающей точкой
- По умолчанию: 1.0
- Контролирует непрозрачностью отображаемого объекта.
- Альфа-преобразование применяется к каждому изображению, содержащему дочерний элемент преобразования, независимо друг от друга. Это может привести к неожиданным результатам, когда дочерние элементы перекрывают друг друга, например, можно видеть тело персонажа через одежду. Flatten() может помочь решить эти проблемы.
- additive
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Определяет, сколько аддитивного смешивания выполняет Ren'Py. Когда 1.0, Ren'Py рисует с помощью оператора ADD. Когда 0.0, Ren'Py рисует с помощью оператора OVER.
- Аддитивное смешивание выполняется для каждого дочернего элемента преобразования независимо друг от друга.
- Полностью аддитивное смешивание не изменяет альфа-канал назначения, и аддитивные изображения могут не отображаться, если они не нанесены непосредственно на непрозрачную поверхность. Сложные операции, такие как viewport, Flatten(), Frame() и некоторые переходы, могут вызвать проблемы с аддитивным смешиванием.
- Предупреждение! Аддитивное смешивание поддерживается только аппаратными средствами рендеринга, такими как рендереры OpenGL и DirectX/ANGLE. Программный рендерер будет рисовать аддитивные изображения неправильно.
- Как только графическая система запустится, renpy.get_renderer_info()["additive"] примет значение True, если поддерживается аддитивное смешивание.
- around
- Тип: (позиция, позиция)
- По умолчанию: (0.0, 0.0)
- Если принимает значение не None, указывает центр полярных координат относительно верхнего левого края охватывающей области. Установка центра с помощью свойства позволяет осуществлять круговое движение вокруг указанной точки в режиме позиционирования.
- alignaround
- Тип: (число с плавающей точкой, число с плавающей точкой)
- По умолчанию: (0.0, 0.0)
- Если принимает значение не None, указывает центр полярных координат относительно верхнего левого края охватывающей области. Установка центра с помощью свойства позволяет осуществлять круговое движение вокруг указанной точки в режиме выравнивания.
- angle
- Тип: число с плавающей точкой
- Получите угловую составляющую положения полярной координаты. Значение не определено, если не задан центр полярных координат.
- radius
- Тип: позиция
- Получите радиус компонента полярной координаты. Значение не определено, если не задан центр полярных координат.
- crop
- Тип: значение None или (целое число, целое число, целое число, целое число) или (число с плавающей точкой, число с плавающей точкой, число с плавающей точкой, число с плавающей точкой)
- По умолчанию: None
- Если принимает значение не None, приводит к тому, что отображаемый объект должен быть обрезан до заданной прямоугольной области. Она задаётся в виде кортежа (x, y, ширина, высота). Если задано число с плавающей точкой, а crop_relative принимает значение True, компоненты принимаются как часть ширины и высоты исходного изображения. Иначе компоненты считаются абсолютным количеством пикселей.
- Если заданы углы и обрезка, то обрезка имеет приоритет над углами.
- crop_relative
- Тип: логическое значение
- По умолчанию: False
- Если принимает значение True, число с плавающей точкой компонентов кадрирования берётся как часть ширины и высоты исходного изображения.
- corner1
- Тип: значение None или (целое число, целое число)
- По умолчанию: None
- Если принимает значение не None, задаёт верхний левый угол области обрезки. Обрезка имеет приоритет над углами.
- corner2
- Тип: значение None или (целое число, целое число)
- По умолчанию: None
- Если принимает значение не None, задаёт нижний правый угол области обрезки. Обрезка имеет приоритет над углами.
- size
- Тип: значение None или (целое число, целое число)
- По умолчанию: None
- Если принимает значение не None, приводит к тому, что отображаемый объект масштабируется до заданного размера.
- maxsize
- Тип: значение None или (целое число, целое число)
- По умолчанию: None
- Если принимает значение не None, приводит к тому, что отображаемый объект масштабируется так, чтобы он помещался в рамку такого размера, сохраняя при этом соотношение сторон. Обратите внимание, что это означает, что один из размеров может быть меньше, чем размер этой рамки.
- subpixel
- Тип: логическое значение
- По умолчанию: False
- Если принимает значение True, вызывает отрисовку объектов на экране, используя субпиксельное позиционирование.
- delay
- Тип: число с плавающей точкой
- По умолчанию: 0.0
- Если это преобразование используется в качестве перехода, то это длительность перехода.
- events
- Тип: логическое значение
- По умолчанию: True
- Если принимает значение True, события передаются дочернему элементу этого преобразования. Если принимает значение False, события блокируются. Это можно использовать в преобразованиях ATL для предотвращения достижения события old_widget.
- xpan
- Тип: значение None или число с плавающей точкой
- По умолчанию: None
- Если принимает значение не None, интерпретируется как угол, который используется для горизонтального панорамирования 360-градусного панорамного изображения. Центр изображения используется в качестве нулевого угла, а левый и правый края, как -180 и 180 градусов соответственно.
- ypan
- Тип: значение None или число с плавающей точкой
- По умолчанию: None
- Если принимает значение не None, интерпретируется как угол, который используется для вертикального панорамирования 360-градусного панорамного изображения. Центр изображения используется в качестве нулевого угла, а верхний и нижний края, как -180 и 180 градусов соответственно.
- xtile
- Тип: целое число
- По умолчанию: 1
- Количество раз, чтобы выложить изображение горизонтально. Игнорируется, когда задается xpan.
- ytile
- Тип: целое число
- По умолчанию: 1
- Количество раз, чтобы выложить изображение вертикально. Игнорируется, когда задается ypan.
- matrixcolor
- Тип: None или Matrix или MatrixColor
- По умолчанию: None
- Если принимает значение не None, значение этого свойства используется для изменения цвета всего, что рисуют дочерние элементы этого преобразования. Дополнительную информацию см. в разделе «Matrixcolor».
- Для этого необходимо включить рендеринг на основе модели, установив для config.gl2 значение True.
- blur
- Тип: None или тип данных с плавающей точкой
- По умолчанию: None
Эти свойства применяются в следующем порядке:
- tile
- crop, corner1, corner2
- size, maxsize
- zoom, xzoom, yzoom
- pan
- rotate
- свойства позиции
Круговое движение (Circular Motion)[править | править код]
Когда оператор interpolation содержит ключевые слова clockwise или counterclockwise, интерполяция вызовет круговое движение. Ren'Py сравнит начальное и конечное местоположение и определит центр полярных координат. Затем Ren'Py вычислит количество градусов, необходимое для перехода от начального угла к конечному углу в указанном направлении вращения. Если задаётся число кругов, Ren'Py гарантирует, что будет сделано соответствующее количество кругов.
Затем Ren'Py, при необходимости, интерполирует свойства угла и радиуса, чтобы вызвать круговое движение. Если преобразование находится в режиме выравнивания, то при установке угла и радиуса будет установлено свойство выравнивания. Иначе будет установлено свойство pos.
Внешние события (External Events)[править | править код]
Следующие события могут быть вызваны автоматически:
- start
- Псевдо-событие, срабатывающее при вводе оператора on, если не произошло событие с более высоким приоритетом.
- show
- Срабатывает, когда преобразование отображается с использованием оператора show или scene, и изображение с данным тегом не существует.
- replace
- Срабатывает, когда преобразование отображается с помощью оператора show, заменяя изображение с данным тегом.
- hide
- Срабатывает, когда преобразование скрывается с помощью оператора hide или его эквивалента в Python.
- Обратите внимание, что это не срабатывает, когда преобразование скрывается с помощью оператора scene или выхода из контекста, в котором оно существует, например, при выходе из игрового меню.
- replaced
- Срабатывает, когда преобразование заменяется другим. Изображение фактически не будет скрываться до тех пор, пока блок ATL не завершится.
- update
- Срабатывает, когда экран обновляется без отображения или замены другого экрана. Это происходит в редких, но возможных случаях, например, когда игра загружается и когда меняются стили или переводы.
- hover, idle, selected_hover, selected_idle
- Срабатывает, когда кнопка, содержащая это преобразование, или кнопка, содержащаяся в этом преобразовании, входит в указанное состояние. То есть когда на нее указывают курсором - hovered; не указывают курсором - idle; указывают/не указывают курсором на кнопку, которая отмечена как выбранная - selected_hover/selected_idle соответственно).
Источник[править | править код]
Статья "Animation and Transformation Language" на английском языке.
На главную страницу | Официальная документация движка | Вернуться к началу статьи |