Свойства трансформации

Свойства трансформации используются Трансформации для влияния на то, как отображается displayable. Обычно они задаются с помощью ATL или класса Transform.

Список свойств трансформации

Существуют следующие свойства трансформации.

Когда в качестве типа указана position, её относительная компонента интерпретируется как доля от размера содержащей области (для pos) или от размера отображаемого объекта (displayable) (для anchor).

Обратите внимание, что не все свойства независимы. Например, xalign и xpos оба обновляют одни и те же внутренние данные. В инструкции parallel не более одного блока должно изменять свойства, использующие общие данные. Свойства угла и радиуса устанавливают как горизонтальное, так и вертикальное положение.

Позиционирование

pos
Type:

(position, position)

Default:

(0, 0)

Позиция относительно верхнего левого угла содержащей области.

xpos
Type:

position

Default:

0

Горизонтальная позиция относительно левого края содержащей области.

ypos
Type:

position

Default:

0

Вертикальная позиция относительно верхнего края содержащей области.

anchor
Type:

(position, position)

Default:

(0, 0)

Позиция якоря относительно верхнего левого угла отображаемого объекта (displayable).

xanchor
Type:

position

Default:

0

Горизонтальная позиция якоря относительно левого края отображаемого объекта (displayable).

yanchor
Type:

position

Default:

0

Вертикальная позиция якоря относительно верхнего края отображаемого объекта (displayable).

align
Type:

(float, float)

Default:

(0.0, 0.0)

Эквивалентно установке одинаковых значений для pos и anchor.

xalign
Type:

float

Default:

0.0

Эквивалентно установке этого значения для xpos и xanchor.

yalign
Type:

float

Default:

0.0

Эквивалентно установке этого значения для ypos и yanchor.

offset
Type:

(absolute, absolute)

Default:

(0, 0)

Количество пикселей, на которое смещается отображаемый объект (displayable) в каждом направлении. Положительные значения смещают вправо-вниз.

xoffset
Type:

absolute

Default:

0

Количество пикселей, на которое смещается отображаемый объект (displayable) в горизонтальном направлении. Положительные значения смещают вправо.

yoffset
Type:

absolute

Default:

0

Количество пикселей, на которое смещается отображаемый объект (displayable) в вертикальном направлении. Положительные значения смещают вниз.

xycenter
Type:

(position, position)

Default:

(0.0, 0.0)

Эквивалентно установке pos в значение этого свойства, а anchor в (0.5, 0.5).

xcenter
Type:

position

Default:

0.0

Эквивалентно установке xpos в значение этого свойства, а xanchor в 0.5.

ycenter
Type:

position

Default:

0.0

Эквивалентно установке ypos в значение этого свойства, а yanchor в 0.5.

subpixel
Type:

boolean

Default:

False

Если True, дочерний элемент будет размещён с использованием субпиксельного позиционирования.

Субпиксельное позиционирование влияет на цвета (включая прозрачность), которые отрисовываются в пикселях, но не на то, какие пиксели отрисовываются. Когда субпиксельное позиционирование используется в сочетании с движением (что является обычным случаем), изображение должно иметь прозрачные границы в тех направлениях, в которых оно может двигаться, если эти края видны на экране.

Например, если спрайт персонажа движется горизонтально, имеет смысл сделать прозрачные границы слева и справа. Они могут не понадобиться при панорамировании фона, выходящего за пределы видимой области, так как края не будут видны.

Вращение

rotate
Type:

float or None

Default:

None

Если None, вращение не происходит. В противном случае, изображение будет повёрнуто на указанное количество градусов по часовой стрелке. Вращение отображаемого объекта (displayable) приводит к изменению его размера в соответствии с настройкой rotate_pad, описанной ниже. Это может вызвать изменение позиционирования, если xanchor и yanchor не равны 0.5.

rotate_pad
Type:

boolean

Default:

True

Если True, то повёрнутый отображаемый объект (displayable) дополняется отступами так, чтобы его ширина и высота были равны гипотенузе исходных ширины и высоты. Это гарантирует, что трансформация не изменит размер при вращении её содержимого. Если False, трансформация получит минимальный размер, который вмещает преобразованный displayable. Это больше подходит для фиксированных вращений.

transform_anchor
Type:

boolean

Default:

False

Если true, точка якоря располагается на обрезанном дочернем элементе и масштабируется и вращается вместе с ним. Фактически, это делает якорь точкой, вокруг которой вращается и масштабируется дочерний элемент.

Масштабирование и отражение

zoom
Type:

float

Default:

1.0

Вызывает масштабирование отображаемого объекта (displayable) на указанный коэффициент.

xzoom
Type:

float

Default:

1.0

Вызывает горизонтальное масштабирование отображаемого объекта (displayable) на указанный коэффициент. Отрицательное значение вызывает горизонтальное отражение изображения.

yzoom
Type:

float

Default:

1.0

Вызывает вертикальное масштабирование отображаемого объекта (displayable) на указанный коэффициент. Отрицательное значение вызывает вертикальное отражение изображения.

Пиксельные эффекты

nearest
Type:

boolean

Default:

None

Если True, отображаемый объект (displayable) и его дочерние элементы отрисовываются с использованием фильтрации по ближайшему соседу. Если False, они отрисовываются с использованием билинейной фильтрации. Если None, значение наследуется от родительского элемента или берётся из config.nearest_neighbor, которое по умолчанию равно False.

alpha
Type:

float

Default:

1.0

Управляет непрозрачностью отображаемого объекта (displayable).

Трансформация альфа-канала применяется к каждому изображению, составляющему дочерний элемент трансформации, независимо. Это может привести к неожиданным результатам, когда дочерние элементы перекрываются, например, к просвечиванию персонажа сквозь одежду. Displayable Flatten() может помочь в решении этих проблем.

additive
Type:

float

Default:

0.0

Управляет степенью аддитивного смешивания, выполняемого Ren'Py. При значении 1.0 Ren'Py рисует с использованием оператора ADD. При 0.0 Ren'Py рисует с использованием оператора OVER.

Аддитивное смешивание выполняется для каждого дочернего элемента трансформации независимо.

Полностью аддитивное смешивание не изменяет альфа-канал назначения, и аддитивные изображения могут быть не видны, если они не нарисованы непосредственно на непрозрачной поверхности. (Сложные операции, такие как viewport, Flatten(), Frame() и некоторые переходы, могут вызывать проблемы с аддитивным смешиванием.)

matrixcolor
Type:

None or Matrix or MatrixColor

Default:

None

Если не None, значение этого свойства используется для перекрашивания всего, что рисуют дочерние элементы этой трансформации. Интерполяция поддерживается только при использовании MatrixColors, и если эти MatrixColors структурно схожи. Смотрите Matrixcolor для получения дополнительной информации.

blur
Type:

None or float

Default:

None

Размывает дочерний элемент этой трансформации на blur пикселей, вплоть до границы displayable. Точные детали размытия могут меняться между версиями Ren'Py, и размытие может проявлять артефакты, особенно когда размываемое изображение меняется.

Размытие вызывает "сплющивание" (flatten) своего дочернего элемента, при котором он отрисовывается на прозрачном фоне перед применением размытия.

Полярное позиционирование

around
Type:

(position, position)

Default:

(0.0, 0.0)

Определяет начальную точку относительно верхнего левого угла содержащей области, из которой будет проведён полярный вектор (вычисленный из angle и radius). Сумма этих двух значений даёт итоговое свойство pos.

angle
Type:

float

Задаёт угловую компоненту позиции, указанной в полярных координатах. Измеряется в градусах, где 0 соответствует верху экрана, а 90 — правому краю.

Ren'Py ограничивает этот угол в диапазоне от 0 до 360 градусов, включая 0, но не включая 360. Если установлено значение вне этого диапазона, оно будет приведено к эквивалентному углу в этом диапазоне перед использованием. (Установка значения -10 эквивалентна установке 350.)

radius
Type:

position

Радиальная компонента позиции, заданной в полярных координатах.

Если это float, значение будет масштабировано до меньшего из ширины и высоты, доступных трансформации.

Полярное позиционирование якоря

Примечание

Хотя использовать полярные координаты для позиционирования якоря возможно, часто удобнее просто установить anchor в (0.5, 0.5) и позиционировать центр вашего displayable.

anchoraround
Type:

(position, position)

Определяет начальную точку относительно верхнего левого угла displayable, из которой будет проведён полярный вектор (вычисленный из anchorangle и anchorradius). Сумма этих двух значений даёт итоговое свойство anchor.

anchorangle
Type:

(float)

Угловая компонента полярных координат якоря. Указывается в градусах, где 0 — верх, а 90 — право.

Ren'Py ограничивает этот угол в диапазоне от 0 до 360 градусов, включая 0, но не включая 360. Если установлено значение вне этого диапазона, оно будет приведено к эквивалентному углу в этом диапазоне перед использованием. (Установка значения -10 эквивалентна установке 350.)

anchorradius
Type:

(position)

Радиальная компонента полярных координат якоря.

Если это float, значение масштабируется горизонтально и вертикально под размер и форму displayable: если высота не равна ширине, радиус, который не является строго абсолютным, приведёт к эллиптическому движению при изменении anchorangle. По этой причине рекомендуется передавать этому свойству только значения типа int или absolute().

Обрезка и изменение размера

crop
Type:

None or (position, position, position, position)

Default:

None

Если не None, вызывает обрезку displayable до указанного прямоугольника. Прямоугольник задаётся как кортеж (x, y, width, height), где x и y — это координаты верхнего левого угла прямоугольника относительно верхнего левого угла дочернего элемента. Все значения могут выходить за границы исходного изображения, при этом область снаружи становится прозрачной, однако width и height должны быть положительными.

Если заданы и corners, и crop, crop имеет приоритет.

corner1
Type:

None or (position, position)

Default:

None

Если не None, задаёт верхний левый угол области обрезки. Значения могут выходить за границы исходного изображения. Crop имеет приоритет над corners.

corner2
Type:

None or (position, position)

Default:

None

Если не None, задаёт правый нижний угол области обрезки. Значения могут выходить за границы исходного изображения, но не должны быть меньше corner1. Crop имеет приоритет над corners.

xysize
Type:

None or (position, position)

Default:

None

Если не None, вызывает масштабирование displayable до указанного размера. Это эквивалентно установке свойств xsize и ysize в первую и вторую компоненты соответственно.

На это влияет свойство fit.

xsize
Type:

None or position

Default:

None

Если не None, вызывает масштабирование displayable до указанной ширины.

На это влияет свойство fit.

ysize
Type:

None or position

Default:

None

Если не None, вызывает масштабирование displayable до указанной высоты.

На это влияет свойство fit.

fit
Type:

None or string

Default:

None

Приводит к изменению размера displayable в соответствии с таблицей ниже. В контексте этой таблицы "размерами" являются:

  • Если и xsize, и ysize не равны None, оба размера используются как размеры.

  • Если только одно из этих свойств не равно None, оно используется как единственный размер.

  • В противном случае, если fit не равно None, в качестве размеров используется область, в которой содержится Transform.

Если fit, xsize и ysize все равны None, это свойство не применяется.

Значение

Описание

contain

Максимально большой, не выходя за рамки размеров. Сохраняет соотношение сторон.

cover

Минимально возможный, но соответствующий всем размерам или превосходящий их. Сохраняет соотношение сторон.

None или fill

Растягивает/сжимает displayable для точного соответствия размерам.

scale-down

Как contain, но никогда не увеличит размер displayable.

scale-up

Как cover, но никогда не уменьшит размер displayable.

Панорамирование и замощение

xpan
Type:

None or float

Default:

None

Если не None, интерпретируется как угол, который используется для горизонтального панорамирования по панорамному изображению с обзором 360 градусов. Центр изображения используется как нулевой угол, а левый и правый края — как -180 и 180 градусов соответственно.

ypan
Type:

None or float

Default:

None

Если не None, интерпретируется как угол, который используется для вертикального панорамирования по панорамному изображению с обзором 360 градусов. Центр изображения используется как нулевой угол, а верхний и нижний края — как -180 и 180 градусов соответственно.

xtile
Type:

int

Default:

1

Количество раз для замощения изображения по горизонтали.

ytile
Type:

int

Default:

1

Количество раз для замощения изображения по вертикали.

Переходы

Смотрите ATL-переходы.

delay
Type:

float

Default:

0.0

Если эта трансформация используется как переход, это его длительность. Смотрите ATL-переходы.

events
Type:

boolean

Default:

True

Если True, события передаются дочернему элементу этой трансформации. Если False, события блокируются. (Это можно использовать в ATL-переходах, чтобы предотвратить попадание событий в old_widget.)

Прочее

fps
Type:

float or None

Default:

None

Если не None, это изменяет время внутри трансформации, делая его дискретным. Например, если у трансформации fps равен 10, то время внутри трансформации будет округлено в меньшую сторону до ближайшего кратного 0.1. Это можно использовать для симуляции более низкой частоты кадров.

show_cancels_hide
Type:

boolean

Default:

True

Обычно, когда отображаемый объект или экран с тем же тегом или именем, что и скрываемый, показывается, скрываемый объект или экран удаляется, отменяя трансформацию hide. Если это свойство установлено в False в трансформации hide, отмена не произойдёт, и трансформация hide завершится полностью.

Есть также несколько наборов свойств трансформации, которые документированы в других местах:

Свойства 3D-сцены:

perspective, point_to, orientation, xrotate, yrotate, zrotate, matrixanchor, matrixtransform, zpos, zzoom

Свойства рендеринга на основе моделей:

blend, mesh, mesh_pad, shader

GL-свойства:

GL-свойства.

Uniform-переменные:

Свойства, начинающиеся с u_, являются uniform-переменными, которые могут использоваться пользовательскими шейдерами.

Порядок применения свойств

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

  1. fps

  2. mesh, blur

  3. tile

  4. pan

  5. crop, corner1, corner2

  6. xysize, size, maxsize

  7. zoom, xzoom, yzoom

  8. point_to

  9. orientation

  10. xrotate, yrotate, zrotate

  11. rotate

  12. zpos

  13. matrixtransform, matrixanchor

  14. zzoom

  15. perspective

  16. nearest, blend, alpha, additive, shader

  17. matrixcolor

  18. GL-свойства, Uniform-переменные

  19. свойства позиционирования

  20. show_cancels_hide

Устаревшие свойства трансформации

Предупреждение

Следующие свойства не следует использовать в современных играх, так как они могут конфликтовать с новыми функциями. Они оставлены здесь только для совместимости, вместе с новым способом достижения того же поведения.

alignaround
Type:

(float, float)

Устанавливает одинаковое значение для anchor, around и anchoraround.

crop_relative
Type:

boolean

Default:

True

Если False, компоненты типа float в crop, corner1 и corner2 интерпретируются как абсолютное число пикселей, а не как доля от ширины и высоты исходного изображения.

Для выражения абсолютного числа пикселей следует передавать этим свойствам экземпляры absolute(), а не использовать свойство crop_relative. При необходимости, значения сомнительного типа можно обернуть в вызов absolute().

size
Type:

None or (int, int)

Default:

None

Это старая версия xysize, интерпретирующая значения с плавающей точкой как абсолютное число пикселей.

maxsize
Type:

None or (int, int)

Default:

None

Если не None, вызывает масштабирование displayable так, чтобы он вписался в рамку этого размера с сохранением соотношения сторон. (Обратите внимание, что это означает, что один из размеров может быть меньше размера этой рамки.)

Для достижения того же результата передайте значения свойству xysize и установите свойство fit в значение "contain".