Различные интерполяции Warpers
Warpers является функцией, которая может изменить количество времени, которое оператор интерполяции рассматривает для протекания. Следующие Warpers определены по умолчанию.
Кому интересно вот отрывок из офф документации
A warper is a function that can change the amount of time an interpolation statement considers to have elapsed. The following warpers are defined by default. They are defined as functions from t to t', where t and t' are floating point numbers, with t ranging from 0.0 to 1.0 over the given amount of time. (If the statement has 0 duration, then t is 1.0 when it runs.) t' should start at 0.0 and end at 1.0, but can be greater or less.
pause
Pause, then jump to the new value. If t == 1.0, t = 1.0. Otherwise, t' = 0.0.
linear
Linear interpolation. t' = t
ease
Start slow, speed up, then slow down. t' = .5 - math.cos(math.pi * t) / 2.0
easein
Start fast, then slow down. t' = math.cos((1.0 - t) * math.pi / 2.0
easeout
Start slow, then speed up. t' = 1.0 - math.cos(t * math.pi / 2.0)
In addition, most of Robert Penner's easing functions are supported. To make the names match those above, the functions have been renamed somewhat. Graphs of these standard functions can be found at http://www.easings.net/.
Ren'Py Name | easings.net Name |
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 |
New warpers can be defined using the renpy.atl_warper decorator, in a python early block. It should be placed in a file that is parsed before any file that uses the warper. This looks like:
|
|
python early hide : @renpy.atl_warper def linear(t): return t
И пример где я их видел в использовании
· # взгляд вниз, затем вверх
· transform downup:
· yanchor 1.0
· yalign 0.0
· easein 3.0 yalign 1.0
· easeout 3.0 yalign 0.0
· # взгляд вверх, затем вниз
· transform updown:
· yanchor 1.0
· yalign 1.0
· easein 3.0 yalign 0.0
· easeout 3.0 yalign 1.0
Alignaround и clockwise circles
alignaround -данный оператор заставляет изображение совершать круговые движения
clockwise circles – число кругов.
Как будто воронкой затянуло
· show logo base:
· alignaround (.5, .5)
· linear 2.0 xalign .5 yalign .5 clockwise circles 3
Around
Устанавливает центр координатной позиции на абсолютную позицию
· show logo small:
· anchor (0.5, 0.5)
· around (640, 216)
20) A ngle
Устанавливает значение угла в градусах
show logo small:
linear 1.0 angle 315
linear 1.0 angle 270
repeat
R adius
Определяет дистанцию от заданной позиции до центра координат
show logo small:
linear 1.0 radius 100
linear 1.0 radius 200
repeat
Tile
Клонирование объектов
show logo base:
xtile 3
ytile 2
Получаем 6 одинаковых изображений
Pan
Создать панораму
show bg panorama:
|
|
xpan 0
linear 10.0 xpan 360
repeat
Где xpan 0 – точка отсчета середина изображения
Offset
Прописывают в конце всех операторов, смещают изображение вправо или вниз на то, сколько указали в их значении xoffset и yoffset
25) randmotion
Что бы его вызвать, нужно немного поработать в питоне.
· init:
· python hide:
· def gen_randmotion(count, dist, delay):
·
· import random
·
· args = [ ]
·
· for i in range(0, count):
· args.append(anim.State(i, None,
· Position(xpos=random.randrange(-dist, dist),
· ypos=random.randrange(-dist, dist),
· xanchor='left', yanchor='top',
· )))
· for i in range(0, count):
· for j in range(0, count):
·
· if i == j:
· continue
·
·
· args.append(anim.Edge(i, delay, j, MoveTransition(delay)))
·
· return anim.SMAnimation(0, *args)
· store.randmotion = gen_randmotion(5, 5, 1.0)
Потом его применяем на спрайте
showeileenhappyatrandmotion
|
|
Как мы видим, спрайт движется, как будто дышит и живой человек, и двигается
Переходы и спецэффекты
В процессе смены фона вы заметили, что они – фоны очень резко сменяют друг друга, ну а спрайты мгновенно появляются. Это довольно сильно бросается в глаза. Для устранения этого недостатка нужно добавить плавные переходы.
Теперь давайте рассмотрим сами эти переходы. Для быстрого ознакомления, пройдите в программу обучения в вашем лаунчере ренпае. Она находится в разделе переходы. Там наглядно описывается, как они пишутся в самой игре
Вот пример самого часто используемой команды:
With Dissolve
scene logo with Dissolve(.5)
Pause .5
Теперь разберем что тут записано
scene logo –вызываем изображение, текст, и т.д
with – Вызов перехода
Dissolve (.5) – имя перехода! Обратите внимание! В питоне всего несколько стандартных переходов, которые автоматически прописаны. Но вдруг вы столкнетесь с интересным для вас переходом в другом проекте, то там, скорее всего она будет, где то записана в сценарии. Простого копирования ими этого перехода не достаточно, и что бы у вас она так же заработала вам, потребуется переписать ее код себе в свой сценарий
pause .5 – это время за который произойдет данный переход(это пол секунды)
|
|
Пример кода с проекта обучения
· show whitehouse ### сценна №1
· with dissolve ### переход
· with Pause(1) ### пауза
· show Washington ### сценна №2
· with dissolve ### переход
2) with fade
Вспышка, а потом переходит как dissolve к новой сцене. Им можно создать эффект лампочки. Для этого вам нужно создать переменную с указание ее цвета(в моем случае белый свет)
· label start:
· $ flashbulb = Fade(0.2, 0.0, 0.8, color='#fff') ### имя перехода flashbulb, задаем цвет белый color='#fff'
И где то в игре
scene komnata with flashbulb
И получаем эффект слеповой гранаты как в КонтрСтрайк. Экспериментируйте
3) with pixellate
Создает эффект перехода пикселей (Например, его часто используют в космических новелках. Где герой получает изображение со спутника и там изображение плавно появляется на экране)
4) with wpunch
Эффект встряски экрана (кувалдой по голове, сверху вниз)
5) with hpunch
Эффект встряски экрана (пощечина, слева на право)
With move
Персонаж плавно меняет позицию на экране (не телепорт а как курсором передвигаем)
Пример
· show rish_1 at right
· with move
· show rish_1 at center
· with move
Здесь мы видим, как rish _1 переходит справа в центр.
With Pause (1)
Спросите, зачем нужна пауза? Допустим ваш герой провел обычный ничем не примечательный день(и показываем сцены дом, школа, столовая, домой) если между каждой сценой не ставить паузу, то программа эти сцены пропустит, так, что вы не успеете ничего увидеть. Мгновенно практически. А если между каждой сценой поставить паузу….то только щелчком мышки поменяются сцены. Или как сейчас тут показано через 1 секунду.
Пример кода с обучения
show bg whitehouse ### сценна №1
with dissolve ### переход
with Pause(1) ### пауза
show bg Washington ### сценна №2
with dissolve ### переход
Жесткая пауза
Так же есть жесткая пауза, например, вы нажали пропуск всех сцен, а вам нужно что бы нельзя было пропустить нужную сцену, вот для этих целей и нужна жесткая пауза
Как "заморозить" экран или изображение на время, без возможности пропуска?
Добавить "особую" паузу с указанием промежутка, после вызова изображения/скрина/спрайта, к примеру на 3 секунды:
scene bg1
$ renpy.pause(3.0, hard=True)
Дата добавления: 2018-10-27; просмотров: 688; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!