• User Attivo

    [Risolto] Fade in out Movieclip [AS2]

    Salve,

    Ho un movie clip che appare e sparisce in vari punti sullo schermo in modo casuale; utilizzando il metodo **attachMovie **e math.random.

    Il problema è che volevo fare in modo che:

    • apparisca con un fade in,
    • resti li per un po',
    • sparisca con un fade out..... e cosi via...Per il fade ho usato queste due funzioni, richiamate tramite setInterval() :
    
    fadein = function (clip, passo, limite) {
            clip._alpha += passo;
            test=1;
        if ((passo>0 && clip._alpha>=limite)) {
            clip._alpha = limite;
            clearInterval(intervallo);
            test=0;
        }
    };
    
    fadeout = function (clip, passo, limite) {
            clip._alpha -= passo;
        if ((clip._alpha<=limite)) {
            clip._alpha = limite;
            clearInterval(intervallo3);
            test=0;
        }
    };
    
    ```Come faccio a sincronizzare il momento in cui fare iniziare il fade in, la pausa e il fade out ? (Da notare tutto è fatto in AS su un solo frame)
    
    Spero di essere stato chiaro nella mia spiegazione. :)

  • Super User

    Ciao 🙂
    Personalmente userei onEnterFrame per i fade e setInterval per attachMovie.
    In questo modo hai il setInterval che ogni tot secondi attacca una clip che parte onEnterFrame e fa fadeIn. Quando ad esempio fermi l' onENterFrame del fadeIn, usi un altro intervallo che chiama la funzione fadeout che a sua volta con EnterFrame esegue il fadeout della clip e a fine fadeout ferma OnEnterFrame e la rimuove.


  • User Attivo

    Grazie Flep per l'aiuto,

    ma non ho capito bene i passaggi potresti essere un po' più preciso?
    questo è il mio codice:

    
    stop();
    function randRange(min:Number, max:Number):Number {
        var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
        return randomNum;
    }
    
    function Show() {
    
        alphaStart= 10;
        var x_pos:Number = randRange(0, 400);
        var y_pos:Number = randRange(0, 300);
        passo=5;
        
        _root.attachMovie("oggetto_id", "oggetto", 1, {_x:x_pos, _y:y_pos, _alpha:alphaStart});
            
        _root.oggetto.onEnterFrame = function() {
                oggetto._alpha += passo;
                if (clip._alpha>=100) {
                    clip._alpha = 100;
                    _root.oggetto.onEnterFrame=null;
                }
        }
    
    }
    
    Show();
    setInterval(Show, 8000);
    
    ```Come faccio a richiamare il **fadeout** **solo alla fine degli 8000 millesimi** di secondi del set interval? 
    Cioè in modo che ci sia un fade-in, un tempo in cui il movie clip è fermo e solo alla fine va in fade-out :? (sincronizzando il tutto per le iterazioni successive)?

  • Super User

    Prova ad aggiungere una funzione del tipo:

    function callShow()
    {
    Show();
    }

    poi, nella funzione Show, dopo la riga
    _root.oggetto.onEnterFrame=null;
    metti
    setInterval(callShow, 8000);


  • User Attivo

    Ho prvovata ad inserire la funzione e il setinterval per il fade out..... Funziona...:yuppi:...ma da dei problemi: :arrabbiato:

    • La prima volta che viene copiato l'oggetto non esegue il fade out (dopo di che tutto ok).
    • Dopo poco tempo il **filmato inizia a degenerare...**a volte i Fade sono più lenti altre volte più veloci, a volte tra un'istanza e un'altra ci sono tempi morti (schermo bianco); Il tempo tra il Fade-in e il Fade-out è uguale a zero..... a lungo andare l'oggetto inizia a lampeggiare durante il fade-in....:(```

    stop();

    // -----------------------------------------------
    function randRange(min:Number, max:Number):Number {
    var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
    return randomNum;
    }
    // -----------------------------------------------

    function callShow()
    {
    ShowOut();
    }

    function ShowIn() {
    fade= 10;
    _global.x_pos = randRange(0, 810);
    _global.y_pos = randRange(0, 300);
    _global.passo=5;

    _root.attachMovie("petra_id", "petra", 1, {_x:_global.x_pos, _y:_global.y_pos, _alpha:fade});
        
        _root.onEnterFrame = function() {
            _root.oggetto._alpha += passo;
            if (_root.oggetto._alpha>=100) {
                oggetto._alpha = 100;
                intervallo_out=setInterval(callShow, 8000);
                _root.onEnterFrame=null;
            }
        }
    

    }

    function ShowOut() {

    fade= 100;
    passo=5;
    
    removeMovieClip("petra");
    _root.attachMovie("oggetto_id", "oggetto", 1, {_x:_global.x_pos, _y:_global.y_pos,  _alpha:fade});
        
        _root.petra.onEnterFrame = function() {
            _root.oggetto._alpha -= passo;
            if ((oggetto._alpha<=0)) {
                oggetto._alpha = 0;
                _root.oggetto.onEnterFrame=null;
                clearInterval(intervallo_out);
                removeMovieClip("oggetto");
            }
        }
    

    }

    ShowIn();
    setInterval(ShowIn, 8000);


  • Super User

    Hai 2 intervalli che girano.
    Usane solo uno.
    Parte il fadeIn che attacca l' immagine, a fine fadeIn chiami il setInterval che fa fadeOut.
    Nel fadeout annulli il setInterval
    Alla fine del fadeOut chiami subito fadein ancora e via dicendo


  • User Attivo

    Grazie Flep,

    😄 Adesso funziona!