Tweening — это термин для редактирования видео, используемый для описания легкости движения. Например, с лифтом лифт не работает на полной скорости и не останавливается, когда достигает желаемого этажа. Он знает, на каком этаже он находится, на каком этаже он собирается и сколько времени потребуется, чтобы туда добраться. Затем он использует эти данные для сглаживания своего движения.
Я хотел бы иметь возможность программировать это плавное движение для моих проектов с помощью твининга.
Как это сделать, изложено в http://robertpenner.com/easing/penner_chapter7_tweening.pdf
В частности, глядя на pg207-211
Это руководство объясняет, что такое анимация движения, а затем показывает код в Action Script. Честно говоря, я чувствую себя немного глупо, потому что я пытался использовать предоставленные примеры, но я не могу воспроизвести его на другом языке, таком как c ++, java, javascript или lua.
Я не хочу использовать пакет или плагин для анимации кода, я хочу узнать, как на самом деле кодировать функцию анимации. Так что, если кто-то с лучшими навыками понимания или программирования, думает, что понимает, я был бы очень благодарен за объяснение.
Примеры функций скрипта Action …
Math.easeInQuad = function (t, b, c, d) {
return c*(t/=d)*t + b;
};
Math.easeOutQuad = function (t, b, c, d) {
return -c * (t/=d)*(t-2) + b;
};
Math.easeInOutQuad = function (t, b, c, d) {
if ((t/=d/2) < 1)
return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
};
Надлежащая функция анимации в AS3 принимает 6 параметров Number
последние два параметра по умолчанию равны 0. Он должен интерпретировать параметры следующим образом:
Ожидаемый результат представляет собой значение между second
а также (second+third)
параметры, или с их каноническими именами t, b, c, d, a, p
между b
а также b+c
,
Вы можете построить график функции, используя простой алгоритм, подобный этому:
function graph(f:Function,w:Number,h:Number):Shape {
// returns a shape with black on white graph drawn within a rectangle of given dimensions
var s:Shape=new Shape();
s.graphics.lineStyle(0); // black
s.graphics.moveTo(0,h); // lower left corner
for (var i:int=0;i<w;i++) {
s.graphics.lineTo(i,f(i,h,-1*h,w));
}
return s;
}
Говоря о C ++, например, easeInQuad
должен быть запрограммирован так (если я не испортил синтаксис C ++):
double easeInQuad(double t, double b, double c, double d) {
double td=t/d;
return b+c*td*td;
}
Других решений пока нет …