понедельник, 12 июля 2010 г.

Анимация объектов при помощи "временных полос (таймлайнов)"

Обычный мой способ анимации объектов занимает довольно много кода и времени. Идея способа состоит в том, что назначаются объекту состояния (проявление альфы, изменение размера, прыжок, и.т.д ) и для каждого состояния я пишу свою логику. В итоге, для довольно сложной анимации приходится много писать.

И тут я обратил своё внимание на свой же класс системы частиц :) Для сложных эффектов я ввёл в класс понятие "временных полос". Суть их в чём. Работают они у меня на основе ассоциативного массива. В качестве ключа у меня стоит время. Допустим нужно создать объект с альфой 0 и за 2 секунды проявить его до 200. С помощью таймлайна это делается следующим образом:

//Инициализация
C_Timeline Alpha;
Alpha.Set(0.0f,0.0f) время и значение
Alpha.Set(2.0f,200.0f) время и значение

LifeTime=0.0f; //время жизни 

//Update
LifeTime += FrameTime; //FrameTime - время рендера предыдущего кадра
ObjectAlpha = Alpha.Get(LifeTime);

В этом коде, когда LifeTime будет равен 1, ObjectAlpha будет равно 100.

Так вот, посмотрел я на этот код и написал класс анимации, с использованием этих таймлайнов. Количество кода, необходимого для анимации, снизилось в разы. Результатом доволен :)

Комментариев нет:

Отправить комментарий