Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    42

    Moviecliploader, mask e transition.tween

    Salve ragazzi,

    sono di nuovo qui con un altra domanda
    scusate se ultimamente stò postando spesso ma cerco di dipanare i miei dubbi su questo forum quando sorgono
    Ad ogni modo, spero che questa domanda sia l'ultima, almeno per un pò!

    Ho creato una galleria fotografica, che popola un array da un file xml, dopodichè carica 3 foto da questo array e le fà entrare in scena tramite actionscript grazie ai CreateEmptyMovieclip e ai moviecliploader.
    Dopodichè i pulsanti "avanti" o "indietro" si muovono nell'array, fanno uscire le 3 foto grazie a un transition.tween e le fanno rientrare con un altro effetto.

    Praticamente tutto (a parte i pulsanti) creato tramite actionscript.

    Ora, il mio problema è questo: il filmato in questione verrà caricato da un filmato genitore tramite "LoadMovieNum()", perciò ho pensato di impostare lo stage del filmato della galleria fotografica grande quanto quello genitore, anche se in realtà la galleria occuperà solo una piccola parte del filmato genitore (perciò in sostanza il fare la galleria fotografica delle stesse dimensioni del filmato genitore, mi permette di piazzare la galleria nella posizione che preferisco all'interno del filmato senza doverlo riposizionare).

    Ora però l'animazione delle foto "in uscita" e "in entrata" (composte da mx.transitions.easing.Back.easeIn, e cioè una sorta di scroll orizzontale) le rende visibili anche quando non dovrebbero, perchè l'animazione le fà uscire dal riquadro assegnato loro (visto che il filmato è grande quanto il genitore).

    perciò, pensavo di risolvere con una maschera, con un actionscript di questo tipo:
    codice:
    this.createEmptyMovieClip("mask_mc", 20);
    with (mask_mc) {
        beginFill(0xFF0000, 0);
        moveTo(0, 0);
        lineTo(300, 0);
        lineTo(300, 100);
        lineTo(0, 100);
        lineTo(0, 0);
        endFill();
    }
    il problema però sorge quando devo creare la maschera per assegnarla ai tre moviecliploader, l'help di flash suggerisce di crearla all'interno del OnLoadInit ma non funziona, preferirei piuttosto assegnare una maschera unica per tutte e 3 le foto.

    per farvi capire il quadro generale, allego parte del codice che uso:

    codice:
    //listener per i 3 moviecliploader
    prlo.addListener(prli);
    selo.addListener(seli);
    telo.addListener(teli);
    
    // creazione dei 3 emptymovieclip da riempire
    var primo:MovieClip = _parent.createEmptyMovieClip("primo", 1);
    var secondo:MovieClip = _parent.createEmptyMovieClip("secondo", 2);
    var terzo:MovieClip = _parent.createEmptyMovieClip("terzo", 3);
    
    //caricamento delle foto nei 3 movieclip
    prlo.loadClip(_parent._parent.Photopath[num], primo);
    num++;
    selo.loadClip(_parent._parent.Photopath[num], secondo);
    num++;
    telo.loadClip(_parent._parent.Photopath[num], terzo);
    
    //animazione di entrata
    var a:Object = new mx.transitions.Tween(primo, "_x", mx.transitions.easing.Back.easeOut, -800, 70, 1.5, true);
    var b:Object = new mx.transitions.Tween(secondo, "_x", mx.transitions.easing.Back.easeOut, -800, 265, 1.5, true);
    var c:Object = new mx.transitions.Tween(terzo, "_x", mx.transitions.easing.Back.easeOut, -800, 460, 1.5, true);
    questo è quello che fà appena viene aperto il filmato.

    Ogni aiuto su come implementare la maschera è gradito

    thx 1000
    Mith84

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    42
    ho risolto cambiando la x iniziale e finale dell'animazione, invece di 800 ho impostato un valore che non uscisse fuori dal riquadro grafico del sito.

    Thx cmq per l'aiuto

    già che ci siamo però, avrei un altro problemuccio sempre a tema

    La sezione in questione è sempre la stessa, questa volta il problema è il seguente:
    nella galleria fotografica, alcune foto possono essere + alte o + larghe, a seconda della proporzione della foto.

    per reimpostare la proporzione ho aggiunto, alla funzione onLoadInit del moviecliploader il seguente script:
    codice:
    larg = target._width;
    alt = target._height;
    target._width=(140*larg)/alt;
    target._height=140;
    quando le foto sono + larghe che alte, il tutto funziona decentemente. Quando sono + alte che larghe invece, escono + piccole delle altre (per mantenerle in proporzione), perciò avevo pensato di cambiare il valore _X del clip caricato, e spostandolo di quanto dovuto per fare in modo che in una fila di 3 foto, quella + alta che larga non esca decentrata rispetto alle altre.

    perciò ho aggiunto, sempre alla funzione onLoadInit:
    codice:
    if (larg<alt){
    	temp=(186-target._width)/2;
    	primax=primax+temp;
    	}
    else primax=50;
    Ora, il tutto dovrebbe funzionare, piccolo problema è che quando richiamo la funzione per animare il clip in questione, questo non cambia la X dinamicamente, ma sembra cambiarla solo al giro successivo di animazione.
    Perciò piuttosto che cambiare la _X prima di impostarla al clip in questione, è come se prima caricasse la clip in questione con il valore _X precedente, e poi lo ricalcolasse solo successivamente.

    Per caricare la clip utilizzo il seguente script:
    codice:
    // animazione in uscita delle foto
    a = new mx.transitions.Tween(primo, "_x", mx.transitions.easing.Back.easeIn, primax, 450, 1.5, true);
    b = new mx.transitions.Tween(secondo, "_x", mx.transitions.easing.Back.easeIn, secondax, 450, 1.5, true);
    c = new mx.transitions.Tween(terzo, "_x", mx.transitions.easing.Back.easeIn, terzax, 450, 1.5, true);
    
    //attesa della fine dell'animazione prima di caricare le successive
    a.onMotionFinished = function() {
    	b.onMotionFinished = function() {
    		c.onMotionFinished = function() {
    
    //caricamento delle foto con controllo dell'array nel caso in cui le foto siano le ultime della lista
    //notare che prlo, selo e telo sono i 3 moviecliploader associati ai rispettivi listener.
    			prlo.loadClip(_parent._parent.Photopath[num], primo);
    			if (num<_parent._parent.Photopath.length-1){
    				num++;
    				selo.loadClip(_parent._parent.Photopath[num], secondo);}
    			else secondo._visible=false;
    			if (num<_parent._parent.Photopath.length-1){
    				num++;
    				telo.loadClip(_parent._parent.Photopath[num], terzo);}
    			else terzo._visible=false;
    
    //partenza animazione in entrata delle foto successive
                            var a:Object = new mx.transitions.Tween(primo, "_x", mx.transitions.easing.Back.easeOut, 0, primax, 1.5, true);
                            var b:Object = new mx.transitions.Tween(secondo, "_x", mx.transitions.easing.Back.easeOut, 0, secondax, 1.5, true);
                            var c:Object = new mx.transitions.Tween(terzo, "_x", mx.transitions.easing.Back.easeOut, 0, terzax, 1.5, true);
    }}}
    Non capisco dove sia l'errore, è come se la mx.transitions.Tween guardasse le variabili "primax", "secondax" e "terzax" (che sono le variabili che si suppone debbano cambiare attraverso il loader del movieclip nel caso in cui queste siano + alte che larghe) prima che i moviecliploader abbiano elaborato la clip da caricare (e quindi cambiato la x di conseguenza).

    A questo punto l'unica soluzione che mi viene in mente sarebbe trovare un modo per chiedere allo script di aspettare che i moviecliploader abbiano completato il caricamento prima di far partire le animazioni, ma credevo che fosse proprio questa la funzione principale dei moviecliploader...

    Nessuno sà darmi un suggerimento?

    thx 1000
    Mith84

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.