Tweening алфа с GreenSock

Опитвам се да променя алфата на graphics обект в AS3 с помощта на GreenSock, но функциите не работят. Опитва се да премине от алфа 0 до 0,7 за 2 секунди. Методът fromTo(); също не работи. Не искам, но трябва ли вместо това да използвам инкрементален for цикъл, за да направя това?—Тъй като това няма да ми даде контрол върху времето на tween.

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 веднага щом графиката се изчертае (няма tween). - 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 Property

Опитах това:

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 без tween. - 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