Как мне изменить эту функцию замедления, чтобы меньше отказов? - PullRequest
3 голосов
/ 11 апреля 2009

Я пытаюсь изменить предоставляемую в Flash CS3 функцию fl.motion.easing.bounce, чтобы полученная анимация меньше отражалась. Я ценю, что «меньше отказов» немного расплывчато, но я был бы признателен за любую помощь в понимании функции.

Спасибо.

 /**
 *  @param t Specifies the current time, between 0 and duration inclusive.
 *
 *  @param b Specifies the initial value of the animation property.
 *
 *  @param c Specifies the total change in the animation property.
 *
 *  @param d Specifies the duration of the motion.
 *
 *  @return The value of the interpolated property at the specified time.     
 */  
public static function easeOut(t:Number, b:Number,
                               c:Number, d:Number):Number
{
    if ((t /= d) < (1 / 2.75))
        return c * (7.5625 * t * t) + b;

    else if (t < (2 / 2.75))
        return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;

    else if (t < (2.5 / 2.75))
        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;

    else
        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;
}

Ответы [ 3 ]

1 голос
/ 11 апреля 2009

По сути, функция возвращает интерполированное значение для новой позиции в зависимости от 4 факторов: текущего времени анимации, начального значения анимируемого свойства, общего изменения анимации и общей продолжительности анимации.

То, что у вас есть, это проверка на разные временные интервалы: если анимация все еще не достигает приблизительно 36% (1 / 2,75) от общей продолжительности, примените первое уравнение; если это между 36% и 72%, примените второе; и т.д.

Каждое уравнение является функцией, зависящей от первых аргументов дерева, поэтому в основном вам нужно немного их настроить.

Я бы предложил поиграть с этим жестко закодированным 7.5625 (увеличьте и уменьшите его, чтобы увидеть результаты), пока вы не будете удовлетворены.


7.5625 равен Math.pow(2.75, 2);, но жестко запрограммирован для экономии при обработке.

0 голосов
/ 19 августа 2015

попробуйте увеличить время первого касания и уменьшить время отскакивания, я делаю сначала целое расстояние 1,4 / 2,7, затем 1,4 ~ 2,1, этот диапазон 0,7, половина диапазона 0,35,0,35 * 0,35 = 0,1225 1-0.1225 = 0.8775, это выглядит хорошо, если вы хотите уменьшить диапазон отскока, попробуйте использовать эту концепцию: уменьшить диапазон двух временных точек.

    t /= d;
    if (t < 1.4 / 2.75) {
        return 3.858419 * t * t;
    }
    else if (t < 2.1 / 2.75) {
        t -= 1.75f / 2.75;
        return 7.5625 * t * t + 0.8775f;
    }
    else if (t < 2.5 / 2.75) {
        t -= 2.3f / 2.75;
        return 7.5625 * t * t + 0.96f;
    }
    t -= 2.625f / 2.75;
    return 7.5625 * t * t + 0.984375f;
0 голосов
/ 12 апреля 2009

Я знаю, что это также не даст вам четкого ответа, но эти уравнения были впервые предложены Робертом Пеннером в его книге Программирование Macromedia Flash MX . Я знаю, что это не простой ответ, но в своей книге он подробно объясняет, как работают эти функции. Чтобы действительно понять, вы можете взять копию и копать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...