Альфа-анимация с помощью GreenSock

Попытка анимировать альфа-канал объекта graphics в AS3 с помощью GreenSock, но функции не работают. Пытаюсь сделать анимацию с альфа-канала 0 на 0,7 за 2 секунды. Метод fromTo(); тоже не работает. Я не хочу, но должен ли я вместо этого использовать инкрементный цикл for, чтобы сделать это? — Поскольку это не даст мне контроля над временем движения.

public function overlayBox():void {

    var overlaySquare:Sprite = new Sprite();

    overlaySquare.graphics.beginFill(0x00000);
    overlaySquare.graphics.drawRect(0, 0, displayRes, displayRes);
    overlaySquare.graphics.endFill();
    overlaySquare.x = xScreenPos;
    overlaySquare.y = yScreenPos;
    TweenMax.from(overlaySquare, 2, {autoAlpha:0});
    TweenMax.to(overlaySquare, 2, {autoAlpha:0.7});

    addChild(overlaySquare);
    trace("overlaySquare index: " + getChildIndex(overlaySquare));
}



РЕДАКТИРОВАТЬ: я исправил переход от альфы 0 до 0,7, заменив функции TweenMax сверху на это:

overlaySquare.alpha = 0;
TweenMax.to(overlaySquare, 5, {alpha:0.7});

Однако возникает проблема с альфа-анимацией, когда она запускается вместе с остальной частью программы. Анимация «мигает» и мгновенно становится равной 0,7 (похоже, она «прыгает» от 0 до 0,7), как только вы ее видите. Проблема была изолирована в функции, которая вызывается после overlayBox(); Обзор программы: изображение загружается с помощью загрузчика. Внутри загрузчика есть файл myTimer.start();. Это используется для запуска остальной части программы после загрузки изображения. overlayBox(); — это первый метод, который следует и работает нормально. Следующий метод, textAnimation();, ломает его, и я понятия не имею, почему:

public function textAnimation():void {

        //set text format
        textFormat.font = "Helvetica Neue Light";
        textFormat.size = 28;
        textFormat.bold = false;
        textFormat.color = 0xFFFFFF;
        //textFormat.letterSpacing = 5;

        //set text size
        var size18bold:TextFormat = new TextFormat();
        size18bold.size = 36;
        size18bold.bold = true;

        // pass text format
        textOne.defaultTextFormat = textFormat;
        textTwo.defaultTextFormat = textFormat;

        var xScreenPosStart:Number = xScreenPos + 440;
        var xScreenPosEnd:Number = xScreenPos - 300;

        textOne.text = "Blah blah blah";
        textOne.autoSize = TextFieldAutoSize.LEFT;
        textOne.x = xScreenPosStart;
        textOne.y = yScreenPos + 240;
        TweenMax.to(textOne, 14, {x:xScreenPosEnd, ease:SlowMo.ease.config(1, 0), repeat:-1});

        textTwo.text = "Blah blah blah";
        textTwo.autoSize = TextFieldAutoSize.LEFT;
        textTwo.x = xScreenPosStart;
        textTwo.y = yScreenPos + 140;
        TweenMax.to(textTwo, 12, {x:xScreenPosEnd, ease:SlowMo.ease.config(1, 0), repeat:-1, delay:4});

        //add to stage
        addChild(textOne);
        trace("textOne index: " + getChildIndex(textOne));
        addChild(textTwo);
        trace("textTwo index: " + getChildIndex(textTwo));

        textOne.setTextFormat(size18bold);

    }

person ArrayOutOfBounds    schedule 04.02.2013    source источник
comment
Вы пытались использовать только альфу вместо плагина autoalpha?   -  person abnvp    schedule 04.02.2013


Ответы (2)


Вместо использования TweenMax.from установите альфу вручную.

overlaySquare.alpha = 0;
TweenMax.to( overlaySquare, 2, { alpha : .7 } );
person Josh    schedule 04.02.2013
comment
Я пытался изменить его на alpha, а не использовать autoAlpha, как указано выше, но все, что он делает, это устанавливает его на 0,7, как только графика отрисовывается (нет анимации). - person ArrayOutOfBounds; 05.02.2013
comment
Когда вы добавляете его к его родителю, родитель уже находится на сцене? Tween не ждет, пока вы добавите его на сцену. Он запускается сразу при вызове. Поэтому, если вы добавите его на сцену позже, это будет выглядеть так, как будто оно было добавлено в альфа-канале == .7. - person Josh; 05.02.2013
comment
На проблему влияет функция, которая запускается после overlayBox(); Он отлично работает сам по себе, а также когда он запускается после displayImage(); выполнять функцию наложения. Я отредактирую это в своем посте. - person ArrayOutOfBounds; 05.02.2013

Дайте начальное значение для альфы и используйте только tweenMax.To

Вы активировали плагин автоматической альфа-версии? Если нет, то сделайте это через

import com.greensock.TweenLite; 
import com.greensock.plugins.TweenPlugin; 
import com.greensock.plugins.AutoAlphaPlugin; 

//activation is permanent in the SWF, so this line only needs to be run once.
TweenPlugin.activate([AutoAlphaPlugin]); 

Если вам не нужна автоматическая альфа-версия, просто используйте свойство alpha.

Я пробовал это:

private function _Show() : void {
    var overlaySquare:Sprite = new Sprite();
    overlaySquare.graphics.beginFill(0x00000);
    overlaySquare.graphics.drawRect(0, 0, 200, 200);
    overlaySquare.graphics.endFill();
    overlaySquare.x = 100;
    overlaySquare.y = 100;
    TweenMax.to(overlaySquare, 2, {alpha:0.7});

    addChild(overlaySquare);
    trace("overlaySquare index: " + getChildIndex(overlaySquare));
}

Это работает.

person abnvp    schedule 04.02.2013
comment
Если вы имеете в виду overlaySquare.graphics.beginFill(0x00000, 0); и TweenMax.to(overlaySquare, 2, {autoAlpha:0.7});, я пробовал это раньше. Альфа-канал всегда остается равным 0 и не меняется. - person ArrayOutOfBounds; 04.02.2013
comment
Да, я импортировал и активировал плагин, но он не работает. Я пробовал только с альфой, но это тоже не работает. Также в этом случае, в чем разница между alpha и autoAlpha? - person ArrayOutOfBounds; 05.02.2013
comment
Читайте здесь: greensock.com/as/docs/tween /com/greensock/plugins/ об AutoAlpha - person abnvp; 05.02.2013
comment
Я повторил ваш код с альфа-значением, как указано в моем ответе, и он отлично работает. Когда вы говорите, что метод не работает, вы имеете в виду, что не видите добавленный спрайт или видите спрайт, но не видите анимацию? - person abnvp; 05.02.2013
comment
Я только что попробовал еще раз и обнаружил несколько проблем. При отдельном запуске происходит вот что: происходит анимация от и альфа от 1 до 0,7 вместо 0 до 0,7. При запуске в качестве наложения поверх отображаемого изображения: оно отрисовывается с альфа-каналом, равным 1, мгновенно мигает и изменяется на 0,7 без анимации движения. - person ArrayOutOfBounds; 05.02.2013
comment
Можете ли вы изолировать проблему только от одной функции. По сути, создайте пустой файл .FLA, присоедините класс Document и добавьте код для _Show() в класс Document. Вызов _Show из конструктора. - person abnvp; 05.02.2013
comment
При изолировании только от функции _Show() с использованием точного кода, приведенного выше: он выполняет анимацию от альфы от 1 до 0,7, а не от альфы от 0 до 0,7. Для этого нужно overlaySquare.alpha = 0;. - person ArrayOutOfBounds; 05.02.2013
comment
Правильно, проблема не в загрузчике. Он анимируется, когда просто запускает методы displayImage() и overlaySquare(). В настоящее время пытаюсь отладить его. Это функция после overlaySquare(), которая каким-то образом вызывает эту проблему с прыжками. Должен ли я редактировать свой пост, чтобы показать проблему? - person ArrayOutOfBounds; 05.02.2013