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

    Un listener per piu' loader (in un ciclo)

    Salve,
    ho cercato un po' nel forum ma non ho trovato niente di utile al mio caso, e la guida di flash non mi aiuta.

    La situazione e' questa: ho creato un solo oggetto listener (che sostanzialmente deve aspettare il caricamento di una immagine, attendere qualche istante (per avere disponibili le dimensioni dell'immagine) e scalare l'immagine come dico).

    Questo oggetto listener mi va bene per tutte le immagini che devo caricare. Quindi ho fatto un solo oggetto listener che ho utilizzato in un ciclo.

    codice:
    		var listener = new Object();
    		listener.onLoadStart = function(targ)
    		{ /* fai qualcosa */ }
    
    		listener.onLoadComplete = function(targ)
    		{/* scala immagine */ };
    
    		var image_loader = new Array();
    
    		for (var i = 0; i < photo_count; i++)
    		{
    			image_loader[i] = new MovieClipLoader();
    			image_loader[i].addListener(listener);
    			image_loader[i].loadClip(pathFoto(i), iEsimoClip(i));
    		}
    Il codice iniziale non aveva il ciclo, e image_loader era un MovieClipLoader e non un array. Ho anche provato senza usare l'array (ovvero una sola variabile continuamente sovrascritta) ma il risultato non cambia.

    Piu' precisamente, il risultato e' che solo per l'ultima fotografia viene utilizzato il listener.

    Io son rimasto sopreso, perche' il listener dovrebbe essere copiato in ogni loader, rendendo quindi ogni istanza indipendente.

    Tanto per essere sicuro che non fosse quello, ho anche provato a dichiarare un listener ad ogni ciclo, e infatti non cambia niente.

    Il risultato quindi e' che onLoadStart e onLoadComplete vengono chiamate solo ed esclusivamente per l'ultima fotografia.

    Qualcuno mi spiega la dinamica della cosa per favore? Non riesco a capirla :master:

    Grazie mille
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    il modo di agire non è propriamente corretto, un array non può contenere in se un Object come il MovieClipLoader, al massimo ne può contenere il nome sottoforma di String

    nel caso proposto il modo corretto di agire sarebbe
    codice:
    var listener = new Object();
    listener.onLoadStart = function(targ)
    { /* fai qualcosa */ }
    listener.onLoadComplete = function(targ)
    {/* scala immagine */ };
    
    for (var i = 0; i < photo_count; i++){
    	this["image_loader"+i] = new MovieClipLoader();
    	this["image_loader"+i].addListener(listener);
    	this["image_loader"+i].loadClip(pathFoto(i), iEsimoClip(i));
    }
    ancora più semplicemente, essendo il MovieClipLoader solo un oggetto che fa le veci del caricamento su di un MovieClip, te ne basta solo uno per tutti i caricamenti, sarà poi il metodo loadClip a decidere come e a chi assegnare il caricamento e le azioni dicharate nel listener

    codice:
    var listener:Object = new Object();
    listener.onLoadStart = function(targ)
    { /* fai qualcosa */ }
    listener.onLoadComplete = function(targ)
    {/* scala immagine */ };
    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(listener);
    for (var i = 0; i < photo_count; i++){
    	mcl.loadClip(pathFoto(i), iEsimoClip(i));
    }

  3. #3
    Eh, il fatto e' che avevo fatto proprio cosi' (secondo modo) la prima volta, e non va: ora modifico il codice, vedo se va e te lo posto...

    Fatto: il risultato e' lo stesso: viene caricato solo l'ultimo clip del ciclo

    codice:
    		var photo_count = 4;
    		for (var i = 0; i < photo_count; i++)
    		{
    			_root.scroller.createEmptyMovieClip("image" + i, _root.getNextHighestDepth());
    			setDisplay(_root.scroller["image" + i], 5 * (i+1) + 45 * i, 2.5, 45, 35);
    			_root.testo.text += _root.scroller["image" + i] + " @ " +
    				_root.scroller["image" + i]._x + ", " +
    				_root.scroller["image" + i]._y + "\n"; // *UNO
    		}
    
    		var listener = new Object();
    		listener.onLoadStart  = function(targ)
    		{
    			_root.testo.text += "loading " + targ + "\n"; // **DUE
    		}
    
    		listener.onLoadComplete = function(targ)
    		{
    			var t;
    
    			_root.testo.text += "loaded " + targ + "\n"; // ***TRE
    
    			var callBack = function()
    			{
    				galleria.scaleTo(targ, 45, 35);
    				clearInterval(t);
    			}
    
    			t = setInterval(callBack, 1000);
    		};
    
    		var image_loader = new MovieClipLoader();
    		image_loader.addListener(listener);
    
    		for (var i = 0; i < photo_count; i++)
    		{
    			image_loader.loadClip("foto_" + (i+1) + ".jpg", _root.scroller["image" + i]);
    		}
    Questo e' lo snip del codice (orribile probabilmente) che sto eseguendo

    Ora magari son scemo e c'e' un errore che non vedo, pero' da *, ** e *** io vedo questi risultati:

    _level0.scroller.image0 @ 5, 2.5
    _level0.scroller.image1 @ 55, 2.5
    _level0.scroller.image2 @ 105, 2.5
    _level0.scroller.image3 @ 155, 2.5
    loading _level0.scroller.image3
    loaded _level0.scroller.image3
    setDisplay(clip, x, y, w, h) non fa altro che spostare il clip alla posizione x,y e poi disegnarci dentro un rettangolo delle dimensioni w,h.

    Scroller e' un movie clip che dovrebbe contenere le varie foto caricate. Con questo codice tecnicamente dovrei vedere le varie immagini caricate nelle rispettive posizioni, poi dopo circa 1 secondo dovrei vederle ridimensionate.
    Il problema e' che come si vede dai messaggi le routine del loader vengono chiamate solo coll'immagine 3, l'ultima (cambiando photo_count cambia anche l'ultima immagine caricata).

    Il codice non e' tutto, e' solo un pezzo ovviamente, spero vivamente che il problema sia QUI (cioe' si il problema e' sicuramente *qui* perche' sara' la mia incompetenza :P)

    Sono davvero mentecatto.

    Grazie mille per l'aiuto
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    Ok ho trovato il problema, che era in quel pezzo di codice, ma non avevo visto -_-'

    Ho notato che sullo schermo non venivano renderizzati i quadrati setDisplay delle immagini che non venivano caricate, e quindi mi e' venuto il dubbio che il problema fosse nella creazione delle immagini, e infatti:

    codice:
    _root.scroller.createEmptyMovieClip("image" + i, _root.getNextHighestDepth());
    e' _root.scroller.getNextHighestDepth().

    Shame on me, mi spiace aver tirato su un polverone per nulla -_-'

    Bhe almeno adesso son sicuro che la loader funzionava come mi aspettavo

    Grazie di tutto
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.