Язык анимации и преобразования (Animation and Transformation Language)

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

Язык анимации и преобразования (далее – 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

Эти свойства применяются в следующем порядке:

  1. tile
  2. crop, corner1, corner2
  3. size, maxsize
  4. zoom, xzoom, yzoom
  5. pan
  6. rotate
  7. свойства позиции

Круговое движение (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" на английском языке.


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