Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66

    Passare variabile a swf appena caricato

    Ciao a tutti, mi sto incartando con un problema banale e spero mi riusciate ad aiutare..

    siamo in AS 2, questo è il codice:

    su un filmato Padre abbiamo questo codice (nPlayers equivale al numero di nodi di un xml che sto caricando)

    for (i=0; i<nPlayers; i++) {
    _root.attachMovie("mc", "mc"+(i+1), i+1);
    _root["mc"+(i+1)].loadMovie(filmato_figlio.swf);
    _root["mc"+(i+1)].xmlTOLoad = "xmldaleggere.xml";
    }

    sul filmato figlio abbiamo

    trace (xmlTOLoad);

    PROBLEMA:
    la variabile _root["mc"+(i+1)].xmlTOLoad non passa dal padre al figlio.

    Cosa Sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66
    nn si può fare?

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao.
    La funzione di caricamento è asincrona. Questo significa che dal momento in cui fai la chiamata di caricamento, con loadMovie, al momento che il movie è effettivamente caricato, passa qualche istante. Per questo motivo la tua variabile non può essere assegnata in quel modo lì.. e per questo motivio dovresti vedere come utilizzare un evento del tipo onLoad che "cattura" il momento in cui il movie sarà effettivamente caricato.

    Ti consiglio di dare uno sguardo alla classe MovieClipLoader che ha una gestione migliore del caricamento confronto al loadMovie.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66
    grazie per la dritta..ho dato un'occhiata in giro e sono giunto a questo:

    FILMATO PADRE:

    var mcLoad:MovieClipLoader = new MovieClipLoader();
    var mcList:Object = new Object();
    mcList.onLoadInit = function(){
    trace("Inizializzato");
    mc.var_inviata = "prova";
    }
    mcLoad.addListener(mcList);
    mcLoad.loadClip("figlio.swf", mc);

    FILMATO FIGLIO:

    trace("ho ricevuto "+var_inviata);

    FINESTRA DI DEBUG:

    ho ricevuto
    Inizializzato

    Come vedi ancora non passa nulla...Perchè secondo te?

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Guarda meglio la guida.

    onLoadInit viene richiamato dopo che vengono eseguite le azioni sul primo frame. Questo vuol dire che se metti un trace nel primo frame di figlio.swf sarà mandato in output prima che avvenga l'evento onLoadInit.

    Tu dovrai utilizzare onLoadComplete che viene richiamato appena il caricamento è stato completato.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66
    grazie mille KillerWorm, ora funziona.

    Ho un'ultima curiosità (spero non mi manderai a quel paese):

    se io volessi caricare n filmati figli e ad ognuno di essi passare una diversa variabile, come dovrei costruire il ciclo for?

    io ho provato un paio di soluzioni ma mi passa sempre la stessa variabile, come se ciascun loader non facesse in tempo a passare la propria variabile...

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    No problem.

    Puoi fare in vari modi, ma dovrei capire come è strutturato il tuo progetto e che tipo di variabili vuoi passare.
    Puoi postare un esempio di ciò che hai provato a fare col ciclo for?.. anche se non funzionante
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66
    allora, sono partito da un post di questo forum (http://forum.html.it/forum/newreply....readid=1314330)

    leggi = function (xmlTOLoad) {
    file = new XML();
    file.ignoreWhite = true;
    file.load(xmlTOLoad);
    file.onLoad = function(success) {
    if (success) {
    var caricatore:MovieClipLoader = new MovieClipLoader();
    var lst:Object = new Object();
    lst.onLoadComplete = function(target:MovieClip):Void {
    //trace(target+" inizializzato");
    target._visible = true;
    target.xmlTOLoad = this.firstChild.childNodes[i].attributes.pla_xml;
    };
    caricatore.addListener(lst);
    nPlayers = this.firstChild.childNodes.length;
    //trace("nPlayers = "+nPlayers);
    for (i=0; i<nPlayers; i++) {
    attachMovie("mc", "mc"+(i+1), i+1);
    _root["mc"+(i+1)]._y = 30+(i*100);
    caricatore.loadClip(this.firstChild.childNodes[i].attributes.pla_url, _root["mc"+(i+1)]);
    }
    }
    };
    };
    leggi("channels.xml");

    Nei vari filmati Figli (che il filmato Padre carica correttamente) non passa mai la variabile xmlTOLoad (possibile sia un errore nei percorsi)??? Oppure debbo creare tanti MovieClipLoader quanti sono i filmati figli da caricare sul filmato padre??

    Grazie per l'aiuto!

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Benissimo..

    Oppure debbo creare tanti MovieClipLoader quanti sono i filmati figli da caricare sul filmato padre??
    No, questo procedimento viene infatti delegato al listener che ha il compito di gestire il caricamento su più istanze indistintamente.

    In linea di massima il tuo script è giusto. Hai semplicemente sbagliato l'utilizzo di "this" in questa riga:
    codice:
    target.xmlTOLoad = this.firstChild.childNodes[i].attributes.pla_xml;
    Questa riga sta all'interno dell'evento onLoadComplete che di per se è una funzione dell'oggetto "lst".
    Per cui, in quel contesto, l'identificatore "this" farà riferimento all'oggetto "lst", cioè all'oggetto più prossimo che contiene lo script e non a "file" che invece sta ad un livello inferiore rispetto all'ordine gerarchico dello script.

    Puoi risolvere molto semplicemente specificando "file" al posto di "this", in questo modo:
    codice:
    target.xmlTOLoad = file.firstChild.childNodes[i].attributes.pla_xml;
    PS: quando posti dello script utilizza i relativi tag di formattazione in modo da rendere più comprensibile il messaggio.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    66
    la tua intuizione è sicuramente giusta, tant'è vero che se scrivo

    target.var_inviata = "bau bau";
    ogni figlio caricato riceve proprio "bau bau"

    purtroppo però se scriviamo

    target.var_inviata = file.firstChild.childNodes[i].attributes.pla_xml;
    ogni figlio caricavo riceve "undefined"

    Sembra che la funzione

    lst.onLoadComplete = function(target:MovieClip):Void {
    target._visible = true;
    target.var_inviata = file.firstChild.childNodes[i].attributes.pla_xml;
    };
    non sappia quanto vale "i" nè tantomeno cos'è file.firstChild.childNodes[i].attributes.pla_xml ...

    Possiamo passargli in qualche modo questi valori??

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.