Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Galleria fotografica: caricamento delle immagini una alla volta

    Ciao a tutti, premendo che sto imparando da poco Flash, quindi scusate se le mie domande saranno da vero principiante.
    Ho realizzato una galleria fotografica in flash, dove le immagini vengono caricate dinamicamente creando dei movie clip tramite Actionscript. Il filmato crea tre box, ovvero le tre cornici all'interno delle quali vengono fatte scorrere le varie thumbnail. Funziona tutto, c'è solo una cosa che non riesco a fare e che vorrei implementare: quando lancio l'animazione, le thumbnail appaiono tutte contemporaneamente con un effetto di dissolvenza. Io vorrei invece che appaiano una dopo l'altra, in sequenza. Come si può fare?
    Questo è il codice presente nel primo frame, con cui creo i movie clip con le immagini, le rendo cliccabili e gli do l'effetto di trasparenza:

    codice:
    contatore_immagine = 3;
    num1 = contatore_immagine-2;
    num2 = contatore_immagine-1;
    num3 = contatore_immagine;
    loadVariables('immagini/testo.txt', _root);
    //creazione box 1
    this.createEmptyMovieClip("box1", 0);
    box1.createEmptyMovieClip("immagine1", 99);
    var my_mcl:MovieClipLoader = new MovieClipLoader();
    my_mcl.loadClip("immagini/immagine1.jpg", box1.immagine1);
    box1._x = 100;
    box1._y = 130;
    box1._alpha = 0;
    box1.onEnterFrame = function():Void  {
    	if (box1._alpha<100) {
    		box1._alpha += 5;
    	} else {
    		box1._alpha = 100;
    		delete this.onEnterFrame;
    	}
    };
    box1.onPress = function():Void  {
    	loadMovie("immagini_grandi/immagine"+(contatore_immagine-2)+".jpg", "foto");
    };
    //creazione box 2
    this.createEmptyMovieClip("box2", 1);
    box2.createEmptyMovieClip("immagine2", 100);
    var my_mcl:MovieClipLoader = new MovieClipLoader();
    my_mcl.loadClip("immagini/immagine2.jpg", box2.immagine2);
    box2._x = 260;
    box2._y = 130;
    box2._alpha = 0;
    box2.onEnterFrame = function():Void  {
    	if (box2._alpha<100) {
    		box2._alpha += 5;
    	} else {
    		box2._alpha = 100;
    		delete this.onEnterFrame;
    	}
    };
    box2.onPress = function():Void  {
    	loadMovie("immagini_grandi/immagine"+(contatore_immagine-1)+".jpg", "foto");
    };
    //creazione box 3
    this.createEmptyMovieClip("box3", 2);
    box3.createEmptyMovieClip("immagine3", 101);
    var my_mcl:MovieClipLoader = new MovieClipLoader();
    my_mcl.loadClip("immagini/immagine3.jpg", box3.immagine3);
    box3._x = 420;
    box3._y = 130;
    box3._alpha = 0;
    box3.onEnterFrame = function():Void  {
    	if (box3._alpha<100) {
    		box3._alpha += 5;
    	}
    };
    box3.onPress = function():Void  {
    	loadMovie("immagini_grandi/immagine"+(contatore_immagine)+".jpg", "foto");
    };
    foto._xscale = 150;
    foto._yscale = 100;
    foto._visible = false;
    Matteo "QMatteo" Pagani

  2. #2
    Ciao.
    Non so se questo può esseri utile, ma l'effetto potrebbe essere simile a quello che cerchi tu.
    Non è proprio correttissimo così, ma ho cercato di adattare il codice al tuo.
    Ovviamente ho creato solo la parte di caricamento e visualizzazione, il resto non l'ho inserito.
    codice:
    //PROTO ALPHA
    MovieClip.prototype.alfa = function(initAlfa, endAlfa, speed) {
    	this._alpha = initAlfa;
    	this.onEnterFrame = function() {
    		var offset = 0.5;
    		var ralfa = Math.abs(endAlfa-this._alpha);
    		trace("ralfa: "+ralfa);
    		if (!(ralfa<offset)) {
    			var dalfa = Math.ceil(ralfa/speed);
    			(this._alpha<endAlfa) ? this._alpha += dalfa : this._alpha -= dalfa;
    			trace("this._alpha: "+this._alpha);
    		} else {
    			trace("alfa completo");
    			delete this.onEnterFrame;
    		}
    	};
    };
    //dichiarazione variabili
    livello = 99;
    xMc = -60;
    yMc = 130;
    i = 1;
    speed = 5;
    //creo e visualizzo le miniature
    _root.onEnterFrame = function() {
    	if (i<=3) {
    		this.createEmptyMovieClip("box"+i, livello++);
    		mc = _root["box"+i];
    		mc.createEmptyMovieClip("immagine"+i, livello++);
    		var my_mc = new MovieClipLoader();
    		my_mc.loadClip("immagini/immagine"+i+".jpg", mc["immagine"+i]);
    		mc._x = xMc+160;
    		xMc = mc._x;
    		mc._y = yMc;
    		mc.alfa(0, 100, speed);
    		i++;
    	} else {
    		delete _root.onEnterFrame;
    	}
    };
    Lorenza

  3. #3
    ah, dimenticavo!

    Lo script che ho postato visualizza le immagini una dopo l'altra senza che abbiano finito però l'assolvenza.

    Se desideri che le immagini si carichino solo al termine del completamento dell'assolvenza, allora devi fare un "setInterval"


  4. #4
    Grazie mille... Funziona perfettamente! Solo una domanda: io devo associare ad ogni box un Load Movie di un immagine in altro clip già presente nella pagina. Ho provato ad aggiungere il metodo dinamicamente, nella funzione di creazione dei box, il codice:

    codice:
    mc.onPress = function():Void {
     		 loadMovie("immagini_grandi/immagine"+i+".jpg","foto");
    però non funziona, mi carica sempre la stessa immagine, che tra l'altro non coincide con quella su cui ho cliccato. Per risolvere il problema dovrei scrivere una funzione per ogni box del tipo:

    codice:
    box1.onPress = function():Void {
     		 loadMovie("immagini_grandi/immagine"+i+".jpg","foto");
    Sapresti dirmi perchè? Grazie!
    Matteo "QMatteo" Pagani

  5. #5
    Altra domanda, sapresti spiegarmi come funziona setInterval? Aiutandomi con l'help, ho trasformato la tua procedura in questo modo:

    codice:
    livello = 99;
    xMc = -60;
    yMc = 130;
    i = 1;
    speed = 30;
    //creo e visualizzo le miniature
    _root.onEnterFrame = function() {
    	if (i<=3) {
    		trace("Contatore= "+contatore_immagine);
    		this.createEmptyMovieClip("box"+i, livello++);
    		mc = _root["box"+i];
    		mc.createEmptyMovieClip("immagine"+i, livello++);
    		var my_mc = new MovieClipLoader();
    		my_mc.loadClip("immagini/immagine"+i+".jpg", mc["immagine"+i]);
    		mc._x = xMc+160;
    		xMc = mc._x;
    		mc._y = yMc;
    		mc.alfa(0, 100, speed);
    		i++;
    		var intervalId:Number;
    		var count:Number = 0;
    		var maxCount:Number = 10;
    		var duration:Number = 1;
    		function executeCallback():Void {
    			trace("executeCallback intervalId: "+intervalId+" count: "+count);
    			if (count>=maxCount) {
    				clearInterval(intervalId);
    			}
    			count++;
    		}
    		intervalId = setInterval(this, "executeCallback", duration);
    		trace("Intervallo="+intervalId);
    	} else {
    		delete _root.onEnterFrame;
    	}
    Il tutto però non funziona, il tempo nel quale si creano le box rimane invariato...
    Matteo "QMatteo" Pagani

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 © 2026 vBulletin Solutions, Inc. All rights reserved.