Код AS3 эквивалент кода Гринсок? - PullRequest
1 голос
/ 22 февраля 2010

у меня есть код

var timeline:TimelineLite=new TimelineLite  ;
timeline.append(new TweenLite(MyClip,1,{y:367,ease:Expo.easeOut}));

Мне нужен соответствующий код в Action Script 3.

РЕДАКТИРОВАТЬ: Как я могу выполнить эту анимацию без использования функций плагина GreenSock? Здесь «TimelineLite» - это класс, а «append» - функции-члены, поэтому без использования этого я могу сделать анимацию.

Ответы [ 5 ]

2 голосов
/ 22 февраля 2010

Какого черта, вы хотите это без плагина?

MyClip.addEventListener(Event.ENTER_FRAME, onEnterFrame);

var time:Number = 0;
var deltaTime:Number = 1 / stage.frameRate;
var initY:Number = MyClip.y
var deltaY:Number = 367 - initY;
function onEnterFrame(event:Event):void
{
    time += deltaTime;

    if (t >= 1)
    {
        MyClip.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        MyClip.y = 367;
    }
    else
    {
        MyClip.y = deltaY * (-Math.pow(2, -10 * time) + 1) + initY;
    }
}

Я думаю, хотя я не проверял это.

Уравнение ослабления от robertpenner.com , хотя можно оптимизировать

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

Действительно, вы должны использовать библиотеку анимации. Они созданы умными людьми, стремящимися выжать каждую унцию производительности из тяжелой работы. Вы также можете рассмотреть вариант Grant Skinner GTween , поскольку он имеет менее ограничительную лицензию, чем TweenLite / TweenMax.

1 голос
/ 23 февраля 2010

РЕДАКТИРОВАТЬ: обновил код, чтобы он создал поддельные сроки. Этот код был основан на ответе alecmce. Просто добавлена ​​возможность секвенирования Твинов. Поскольку ваш вопрос заключается в том, как реплицировать членов класса без класса, с помощью динамического Actionscrip вы можете псевдо написать класс внутри объекта и предоставить вам тот же синтаксис при вызове функций. Перефразировать: Единственное предложение сделать это, чтобы дать вам тот же синтаксис. Та же функциональность может быть достигнута при удалении объекта timeline.

пример с двумя последовательными twens:

timeline.append( MyClip,  367);
timeline.append( MyClip2, 200 );

timeline.startAnimation();

(см. Обновленный код ниже)


мой 10-минутный неуклюжий подход:

// updated code    
var timeline:Object = new Object();
timeline.memory = new Array();

timeline.append = function (tween_obj:MovieClip, toY:Number){ 
    this.memory.push ([tween_obj, toY]);
};

timeline.checkTimeline = function (){ 

    if (this.memory[0] != null) {
        this.TweenFeather(MovieClip(this.memory[0][0]));
    }
};

timeline.startAnimation = function () { 
    this.checkTimeline();
};

timeline.TweenFeather = function TweenFeather(_do:MovieClip):void 
{
    _do.addEventListener(Event.ENTER_FRAME, _onEnterFrame);

    var time:Number = 0;
    var deltaTime:Number = 1 / stage.frameRate;
    var initY:Number = _do.y;
    var deltaY:Number = this.memory[0][1] - initY;
    function _onEnterFrame(event:Event):void
    {
        time += deltaTime;

        if (time >= 1)
        {
            _do.removeEventListener(Event.ENTER_FRAME, _onEnterFrame);
            _do.y = timeline.memory[0][1];

            timeline.memory.shift();
            timeline.checkTimeline();
        }
        else
        {
            _do.y = deltaY * (-Math.pow(2, -10 * time) + 1) + initY;
        }
    }
}

timeline.append( MyClip,  367);
timeline.append( MyClip2, 200 );

timeline.startAnimation();

используя динамический actionScript, вы теряете все хорошие качества as3, не знаю, насколько вы ограничены в k. Удачи

1 голос
/ 22 февраля 2010

Вы не можете повторить это, используя базовую функциональность AS3. Библиотека анимации Greensock добавляет функциональность в том смысле, что она позволяет вам сгруппировать множество анимаций в одну временную шкалу, чтобы анимации работали последовательно. Если вы хотите повторить это, вам нужно будет создать Tweens для каждого элемента, который вы хотите анимировать, и использовать событие TweenEvent.MOTION_FINISHED после каждой анимации, чтобы запустить следующую анимацию.

1 голос
/ 22 февраля 2010

Да, код действительный ActionScript3. TimelineLite и TimelineMax являются частью механизма анимации GreenSock. См. Здесь: TimelineLite - последовательность / группа нескольких исполнителей, управляйте ими как целым .

0 голосов
/ 22 февраля 2010

Насколько я могу судить, вы опубликовали код (не зная API для TweenLite), полностью действительный ActionScript 3.

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