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

    AS3 Problema parent as MovieClip per passaggio di variabili tra swf

    Ciao,
    sono giorni che cerco di capire dove sbaglio e non riesco a trovare una soluzione.
    Spero che qualcuno di voi possa aiutarmi perchè sto davvero impazzendo e se non risolvo il problema non posso andare avanti con lo sviluppo del sito.

    Ho creato 2 swf.

    Il principale (uno.swf) carica il secondario dentro di sè (due.swf), il quale non fa altro che richiamare una variabile settata nel principale e visualizzarla del campo di testo dinamico che si trova nel secondario. Questo mi serve solo per sapere che la variabile è visibile dal secondario. Avrei potuto usare il comando trace. Ma il punto è che il secondario (due.swf) non vede proprio la variabile che ho creato e settato nel principale (uno.swf).

    Incollo di seguito il codice:

    UNO.SWF:

    var variabileDaPassare="funziona!";

    //da qui in poi il codice serve solo per caricare "due.swf" dentro lo stage di "uno.swf"
    var url = "due.swf";
    var richiesta:URLRequest = new URLRequest(url);
    var caricatore=new Loader()
    caricatore.load(richiesta)
    addChild(caricatore);

    DUE.SWF:

    var genitore=(parent as MovieClip);
    testo.text=genitore.variabileDaPassare;
    Ho provato anche con:

    testo.text=(parent as MovieClip).variabileDaPassare;

    e

    testo.text=MovieClip(parent).variabileDaPassare;

    L'actionscript che uso è il 3 e la versione di Flash è CS4. Ho provato sia in locale che a caricare tutto su un server.

    Potete scaricare lo zip contente i sorgenti qui:
    http://www.sendspace.com/file/z5me3q

    Un sincero
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Fai così: In "due.swf" metti questo codice:

    Codice PHP:
    var genitore:MovieClip this.parent.parent as MovieClip;
    testo.text genitore.variabileDaPassare
    Lancia "due.swf" (ctrl + invio) riceverai un errore del tipo:
    Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
    Ignoralo e lancia il filmato caricatore (uno.swf).

    Vedrai il contenuto della tua variabileDapassare nel campo di testo su "due.swf".

    Ciao

  3. #3
    Originariamente inviato da Sleter
    Ciao

    Fai così: In "due.swf" metti questo codice:

    Codice PHP:
    var genitore:MovieClip this.parent.parent as MovieClip;
    testo.text genitore.variabileDaPassare
    Lancia "due.swf" (ctrl + invio) riceverai un errore del tipo:
    Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
    Ignoralo e lancia il filmato caricatore (uno.swf).

    Vedrai il contenuto della tua variabileDapassare nel campo di testo su "due.swf".

    Ciao
    Genio! Ti devo una birra!!! Eheh
    Grazie non sai che sollievo!
    Grazie!!!

    Posso chiederti il significato di "this.parent.parent"?
    So che this si riferisce alla timeline principale che messa davanti a parent significa la timeline principale del genitore.. ma perchè il doppio parent?

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Ti ringrazio per il "genio" ma è un tantino eccessivo.

    Sono arrivato alla soluzione del tuo problema (non dubito che ce ne siano altre) grazie a uno studio fatto poco tempo fa sulla comunicazione appunto, da parte di un .swf caricato con l'.swf principale.

    Posso chiederti il significato di "this.parent.parent"?
    So che this si riferisce alla timeline principale che messa davanti a parent significa la timeline principale del genitore.. ma perchè il doppio parent?
    Ogni volta che aggiungi un .parent, fai riferimento a un livello inferiore.
    Quindi se sei sul livello 0 di "due.swf" ovvero sulla Sua timeline principale (this) per fare riferimento alla timeline principale del "caricatore" (uno.swf) devi scendere di 2 livelli perchè sul primo c'è l'oggetto Loader ovvero, "due.swf".

    Per capire meglio puoi aggiungere un Listener all'evento COMPLETE dell'oggetto caricato in "uno.swf" e vedere su che livello "due.swf" viene aggiunto allo stage:

    Codice PHP:
    var url "due.swf";
    var 
    richiesta:URLRequest = new URLRequest(url);
    var 
    caricatore=new Loader()
    caricatore.load(richiesta)
    addChild(caricatore);
    caricatore.contentLoaderInfo.addEventListener(Event.COMPLETEcaricamentoComplatato)
    function 
    caricamentoComplatato(evento:Event):void{
    trace(caricatore.numChildren);} 
    Ricevi come output: 1

    Altra prova puoi farla eseguendo questi trace in "due.swf":

    Codice PHP:
    trace(this)
    trace(this.parent)
    trace(this.parent.parent
    Ricevi come output:
    [object MainTimeline]
    [object Loader]
    [object MainTimeline]

    Comunque, secondo il mio parere si tratta di un metodo un pò strano per gestire gli oggetti e sinceramente non ne vedo la necessità (probabile che sia un mio limite).
    Stò cercando di eliminare completamente l'utilizzo di codice sui fotogrammi in quanto la gestione della timeline principale da parte di classi.as esterne, una volta fatta un pò di pratica risulta davvero più ordinata, facilmente modificabile e meno problematica dell'utilizzo di codice .as interno.

    Ciao e Buon proseguimento con AS3 !
    Anche se a volte fa rischiare il ricovero alla neuro più si approfondisce e più diventa divertente e gratificante.

    ciao

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.