Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Анімація властивостей

Усі числові властивості (numbers, vector3, vector4 та кватерніони) і константи шейдерів можна анімувати за допомогою вбудованої системи анімації, використовуючи функцію go.animate(). Рушій автоматично інтерполюватиме властивості відповідно до заданих режимів відтворення та функцій згладжування (easing). Також можна задавати власні функції згладжування.

Анімація властивостей Циклічний відскок

Анімація властивостей

Щоб анімувати властивість ігрового об’єкта (game object) або компонента (component), використовуйте функцію go.animate(). Для властивостей вузлів GUI відповідною функцією є gui.animate().

-- Set the position property y component to 200
go.set(".", "position.y", 200)
-- Then animate it
go.animate(".", "position.y", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_OUTBOUNCE, 2)

Щоб зупинити всі анімації певної властивості, викличте go.cancel_animations(), а для вузлів GUI — gui.cancel_animations():

-- Stop euler z rotation animation on the current game object
go.cancel_animations(".", "euler.z")

Якщо скасувати анімацію складеної властивості, наприклад position, усі анімації її складових (position.x, position.y і position.z) також буде скасовано.

У посібнику з властивостей наведено всі доступні властивості ігрових об’єктів, компонентів і вузлів GUI.

Анімація властивостей вузлів GUI

Майже всі властивості вузлів GUI можна анімувати. Наприклад, можна зробити вузол невидимим, задавши повну прозорість у його властивості color, а потім поступово зробити його видимим, анімуючи зміну кольору на білий (тобто без тонування).

local node = gui.get_node("button")
local color = gui.get_color(node)
-- Animate the color to white
gui.animate(node, gui.PROP_COLOR, vmath.vector4(1, 1, 1, 1), gui.EASING_INOUTQUAD, 0.5)
-- Animate the outline red color component
gui.animate(node, "outline.x", 1, gui.EASING_INOUTQUAD, 0.5)
-- And move to x position 100
gui.animate(node, hash("position.x"), 100, gui.EASING_INOUTQUAD, 0.5)

Зворотні виклики після завершення

Функції анімації властивостей go.animate() і gui.animate() підтримують необов’язкову функцію зворотного виклику Lua як останній аргумент. Цю функцію буде викликано, коли анімація відтвориться до кінця. Функція ніколи не викликається для циклічних анімацій, а також коли анімацію скасовано вручну за допомогою go.cancel_animations() або gui.cancel_animations(). Зворотний виклик можна використовувати для запуску подій після завершення анімації або для об’єднання кількох анімацій у послідовність.

Згладжування

Згладжування визначає, як анімоване значення змінюється з часом. Наведені нижче зображення показують функції, які застосовуються в часі для створення згладжування.

Для go.animate() допустимі такі значення згладжування:

go.EASING_LINEAR  
go.EASING_INBACK go.EASING_OUTBACK
go.EASING_INOUTBACK go.EASING_OUTINBACK
go.EASING_INBOUNCE go.EASING_OUTBOUNCE
go.EASING_INOUTBOUNCE go.EASING_OUTINBOUNCE
go.EASING_INELASTIC go.EASING_OUTELASTIC
go.EASING_INOUTELASTIC go.EASING_OUTINELASTIC
go.EASING_INSINE go.EASING_OUTSINE
go.EASING_INOUTSINE go.EASING_OUTINSINE
go.EASING_INEXPO go.EASING_OUTEXPO
go.EASING_INOUTEXPO go.EASING_OUTINEXPO
go.EASING_INCIRC go.EASING_OUTCIRC
go.EASING_INOUTCIRC go.EASING_OUTINCIRC
go.EASING_INQUAD go.EASING_OUTQUAD
go.EASING_INOUTQUAD go.EASING_OUTINQUAD
go.EASING_INCUBIC go.EASING_OUTCUBIC
go.EASING_INOUTCUBIC go.EASING_OUTINCUBIC
go.EASING_INQUART go.EASING_OUTQUART
go.EASING_INOUTQUART go.EASING_OUTINQUART
go.EASING_INQUINT go.EASING_OUTQUINT
go.EASING_INOUTQUINT go.EASING_OUTINQUINT

Для gui.animate() допустимі такі значення згладжування:

gui.EASING_LINEAR  
gui.EASING_INBACK gui.EASING_OUTBACK
gui.EASING_INOUTBACK gui.EASING_OUTINBACK
gui.EASING_INBOUNCE gui.EASING_OUTBOUNCE
gui.EASING_INOUTBOUNCE gui.EASING_OUTINBOUNCE
gui.EASING_INELASTIC gui.EASING_OUTELASTIC
gui.EASING_INOUTELASTIC gui.EASING_OUTINELASTIC
gui.EASING_INSINE gui.EASING_OUTSINE
gui.EASING_INOUTSINE gui.EASING_OUTINSINE
gui.EASING_INEXPO gui.EASING_OUTEXPO
gui.EASING_INOUTEXPO gui.EASING_OUTINEXPO
gui.EASING_INCIRC gui.EASING_OUTCIRC
gui.EASING_INOUTCIRC gui.EASING_OUTINCIRC
gui.EASING_INQUAD gui.EASING_OUTQUAD
gui.EASING_INOUTQUAD gui.EASING_OUTINQUAD
gui.EASING_INCUBIC gui.EASING_OUTCUBIC
gui.EASING_INOUTCUBIC gui.EASING_OUTINCUBIC
gui.EASING_INQUART gui.EASING_OUTQUART
gui.EASING_INOUTQUART gui.EASING_OUTINQUART
gui.EASING_INQUINT gui.EASING_OUTQUINT
gui.EASING_INOUTQUINT gui.EASING_OUTINQUINT

Лінійна інтерполяція Відхилення назад на вході Відхилення назад на виході Відхилення назад на вході-виході Відхилення назад на виході-вході Відскоки на вході Відскоки на виході Відскоки на вході-виході Відскоки на виході-вході Пружне згладжування на вході Пружне згладжування на виході Пружне згладжування на вході-виході Пружне згладжування на виході-вході Синусоїдальне згладжування на вході Синусоїдальне згладжування на виході Синусоїдальне згладжування на вході-виході Синусоїдальне згладжування на виході-вході Експоненційне згладжування на вході Експоненційне згладжування на виході Експоненційне згладжування на вході-виході Експоненційне згладжування на виході-вході Кругове згладжування на вході Кругове згладжування на виході Кругове згладжування на вході-виході Кругове згладжування на виході-вході Квадратичне згладжування на вході Квадратичне згладжування на виході Квадратичне згладжування на вході-виході Квадратичне згладжування на виході-вході Кубічне згладжування на вході Кубічне згладжування на виході Кубічне згладжування на вході-виході Кубічне згладжування на виході-вході Згладжування за функцією четвертого степеня на вході Згладжування за функцією четвертого степеня на виході Згладжування за функцією четвертого степеня на вході-виході Згладжування за функцією четвертого степеня на виході-вході Згладжування за функцією п’ятого степеня на вході Згладжування за функцією п’ятого степеня на виході Згладжування за функцією п’ятого степеня на вході-виході Згладжування за функцією п’ятого степеня на виході-вході

Власне згладжування

Ви можете створювати власні криві згладжування, визначивши vector із набором значень, а потім передати цей вектор замість однієї з наведених вище констант згладжування. Значення вектора задають криву від початкового значення (0) до цільового (1). Середовище виконання вибирає значення з вектора та використовує лінійну інтерполяцію для обчислення значень між точками, заданими у векторі.

Наприклад, вектор:

local values = { 0, 0.4, 0.2, 0.2, 0.5, 1 }
local my_easing = vmath.vector(values)

задає таку криву:

Власна крива

У наведеному нижче прикладі позиція ігрового об’єкта за віссю y стрибкоподібно змінюється між поточною позицією та 200 відповідно до прямокутної кривої:

local values = { 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1 }
local square_easing = vmath.vector(values)
go.animate("go", "position.y", go.PLAYBACK_LOOP_PINGPONG, 200, square_easing, 2.0)

Прямокутна крива