Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   про изинг (http://www.flasher.ru/forum/showthread.php?t=209991)

greep 12.01.2015 17:58

про изинг
 
Всем привет. Решил прицепить вместо большой либы, себе в проект, маленькую изинговую функцию. Например такую

Код AS1/AS2:

        easeOutQuad = function(t, b, c, d) {
                return -c *(t/=d)*(t-2) + b;
        }

Где:

t - первая итерация
d - конечная
b - начальная точка
с - конечная точка

Например я хочу программно двигать мувиклип из точки х = 50 в точку х= 310. В течении 50 кадров. Получается у меня такой вот код:

Код AS1/AS2:

if (t<=d) {
                        mc._x = easeOutQuart(t, 50, 310, d);
 
                        }else{
                        d=0;
                        }
                t++;
 
                }else{
                        mc._x = easeOutQuart(t, 50, 310, d);
                        myEasingStatus = false;
                }

Все прекрасно работает пока начальная точка больше нуля, а конечная точка больше начальной. Но если мне нужно двигать мувиклип из точки х=200 в точку х=-200 тут почему-то казалось бы стандартная изинговая формула не арбайтен.

Но если не много ее доработать...

Код AS1/AS2:

        easeOutQuad = function(t, b, c, d) {
                var b2 = b;
                var c2 = c;
                if(b > c){
                        b = c2;
                        c = c2-b2;
                }
                return -c *(t/=d)*(t-2) + b;
        }

то по крайней мере из точки 400 можно анимировать в точку 100...

Задачка собственно состоит в том, чтобы можно было бы использовать все эти многочисленные изинговые функции и многочисленных фреймворков типа jqwery и прочих библиотек универсально. Просто добавляешь функцию к себе и вставляешь любые значения, типа из х=0 в х=500 или из х=100 в х=-200 или х=1 в х=0 и т.д.

помогите пожалуйста разобраться как этого можно достичь. большое спасибо заранее, бьюсь второй день...

dark256 13.01.2015 01:43

Зачем изобретать велосипед?
https://greensock.com/tweennano-as

Привес к коду около 4 килобайт...

greep 13.01.2015 13:44

2 dark256: Спасибо большое за библиотеку. У меня тоже есть, правда чуть больше весят. Все дело в том, что если ты делаешь баннер, вес которого по техническим требованиям не должен превышать 25 кб, а клиент хочет полнометражный анимационный фильм на заданную тему, с детализированной графикой и спецэффектами, 3 кб это очень много... Даже если пропускать swf-ку через оптимайзер...

ЗЫ. Сорри, нижний кусок кода был по ошибке вставлен другой.

Суть в общем в том, чтобы дописать универсальный кусок, которым можно было бы дополнить любую изинговую функцию и получить результат.

Посмотрел вашу библиотеку, нашел там все те же формулы:

Код AS1/AS2:

return 1 - Math.pow(2, -10 * p);

Это формула из expoOut.

В классе все выглядит так:

Код AS1/AS2:

package com.greensock.easing {
        final public class ExpoOut extends Ease {
 
                /** The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time. **/
                public static var ease:ExpoOut = new ExpoOut();
 
                /** @inheritDoc **/
                override public function getRatio(p:Number):Number {
                        return 1 - Math.pow(2, -10 * p);
                }
 
        }
 
}

Есть ощущение, что вся соль живет в

Код AS1/AS2:

getRatio(p:Number)


dark256 13.01.2015 18:00

Баннеры на 25 кб тоже делаю. Поэтому и юзаю эту штуку. Пока удается впихивать.

greep 13.01.2015 19:23

Ясно, поскольку я уже не в первом месте спрашиваю, либо никто не знает, либо не хочет делиться...

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

Hauts 27.01.2015 10:33

greep, а типа такого не подойдет?

Код AS1/AS2:

clip.onEnterFrame = function(){
    this._x += ( _root._xmouse - this._x ) / 10;
}

Некоторая плавность будет.


Часовой пояс GMT +4, время: 21:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.