Воспроизведение постепенного и постепенного исчезновения в петле - PullRequest
1 голос
/ 08 марта 2012

Я новичок в as3.У меня есть один видеоклип на сцене.Я хочу воспроизвести их в цикле, когда исчезает my_mc, должно начаться постепенное исчезновение и наоборот.Я хочу сыграть их в цикле.Функция затухания сначала работает нормально.Но как загрузить постепенное исчезновение после исчезновения?

my_mc.addEventListener(Event.ENTER_FRAME, fadeout);

function fadeout(e:Event){
    if(my_mc.alpha >=1){
        this.alpha -=0.1;
        if(my_mc.alpha <=0){
            this.removeEventListener(Event.ENTER_FRAME, fadeout);
        }
    }
}

my_mc.addEventListener(Event.ENTER_FRAME, fadein);

function fadein(e:Event){
    if(my_mc.alpha <=0){
        this.alpha +=0.1;
        if(my_mc.alpha >=1){
            this.removeEventListener(Event.ENTER_FRAME, fadein);
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 08 марта 2012
my_mc.addEventListener(Event.ENTER_FRAME, fadeout);

function fadeout(e:Event){
    if(my_mc.alpha <=0){
        my_mc.removeEventListener(Event.ENTER_FRAME, fadeout);
        my_mc.addEventListener(Event.ENTER_FRAME, fadein);
    } else {
        my_mc.alpha -=0.1;
    }
}

function fadein(e:Event){
    if(my_mc.alpha >= 1){
        my_mc.removeEventListener(Event.ENTER_FRAME, fadein);
        my_mc.addEventListener(Event.ENTER_FRAME, fadeout);
    } else {
        my_mc.alpha +=0.1;
    }
}
1 голос
/ 08 марта 2012

В fadeout, как только вы обнаружили, что альфа равен <= 0 и удалите прослушиватель событий, просто добавьте еще один прослушиватель для функции <code>fadein:

function fadeout(e:Event){
    if(my_mc.alpha >=1){
        this.alpha -=0.1;
        if(my_mc.alpha <=0){
            this.removeEventListener(Event.ENTER_FRAME, fadeout);
            this.addEventListener(Event.ENTER_FRAME, fadein);  // add this
        }
    }
}

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

0 голосов
/ 15 марта 2013

Мне удалось улучшить исходный ответ @sch =) Я сделал функцию, в которой вы можете передать любой данный мувиклип в качестве аргумента и к нему будет применен цикл Fadein / fadeout.Вот как (с комментариями):

// A boolean variable holds the flag for this to be applied
var boolFadeinFadeoutCicle:Boolean=true;
// This function can receive as a parameter a movieclip
function fncFadeinFadeout(mc:MovieClip){
    if(boolFadeinFadeoutCicle){
        //The fadeout listener it's added here, all relative to the mc received
            MovieClip(mc).addEventListener(Event.ENTER_FRAME, Fadeout);
        function Fadeout(evt:Event){
            MovieClip(mc).alpha -=0.05;
                    //Once the mc.alpha reaches zero, the fadeout listener it's removed and the fadein one it's added
            if (MovieClip(mc).alpha <= 0){  
                MovieClip(mc).removeEventListener(Event.ENTER_FRAME, Fadeout);
                MovieClip(mc).addEventListener(Event.ENTER_FRAME, Fadein);
            }
                    //Here the logic it's the same, but inverted.
            function Fadein(evt:Event){
                MovieClip(mc).alpha +=0.05;
                if (MovieClip(mc).alpha >= 1){  
                    MovieClip(mc).removeEventListener(Event.ENTER_FRAME, Fadein);
                    MovieClip(mc).addEventListener(Event.ENTER_FRAME, Fadeout);
                }
            }
        }
    }           
}

Как видите, это та же логика, что и у ответа @sch, но с другой структурой, которая может принимать MovieClip в качестве параметра, подобного этому:

fncFadeinFadeout(mc0);
fncFadeinFadeout(mc0);
fncFadeinFadeout(mc0);
...

Все эти мувиклипы будут появляться и исчезать одинаково.Благодаря @sch answer и этому уроку !Я надеюсь, что вы все найдете этот другой подход полезным;) =)

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