Различные интерполяции 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!