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 можна анімувати. Наприклад, можна зробити вузол невидимим, задавши повну прозорість у його властивості 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)
