Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    AS3 - Classe che richiama variabile da timeline

    Ciao ragazzi, ho un problema che non riesco a capire, ancor prima che a risolvere.
    Ho una classe che genera dei thumbs richiamando valori da un foglio XML; avrei bisogno che il path del foglio XML fosse dinamico, ovvero vorrei dirgli io dalla timeline come si chiama di volta in volta il foglio XML.

    Per cui URLRequest("xml/+nomedelmiofoglio+".xml);

    la variabile "nomedelmiofoglio" la voglio definire io da timeline, perchè prenderà il valore da un menù anch'esso XML che mi genererà le varie galleries.

    Nessuno ha idea di come poter fare oppure un consiglio su come ovviare alla cosa?
    Vi ringrazio anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non se l'errore è di battitura sul forum, ma quell'URLRequest va scritto così:

    Codice PHP:
    URLRequest("xml/"+nomedelmiofoglio+".xml"

  3. #3
    Ciao and,
    si era un errore di battitura, il mio problema è che, appunto, non riesco a mandare il valore di quella variabile dalla timeline alla classe.
    Se faccio un trace dalla classe il risultato è undefined o null, dipende se dichiaro la variabile String o meno dalla timeline, ma probabilmente sbaglio metodo.
    Tu mi sai consigliare qualcosa?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Perdonami, l'errore di battitura mi ha fuorviato.
    La classe non può accedere direttamente ad una proprietà della timeline principale e le modalità di accesso sono determinate dal tipo di classe che hai scritto ecc...

    La maniera più semplice di passare quel valore alla classe è quella di usare un parametro nel costruttore, quindi ponendo che la tua classe sia scritta così:

    Codice PHP:
    package {
        public class 
    MiaClasse {
            public function 
    MiaClasse () {
            }
        }

    dovrai scriverla così:

    Codice PHP:
    package {
        public class 
    MiaClasse {
            protected var 
    parametro:String
            
    public function MiaClasse (nomedelmiofoglio:String) {
                
    parametro nomedelmiofoglio;
            }
        }

    e usare la variabile "parametro" all'interno della tua classe:

    Codice PHP:
    URLRequest("xml/"+parametro+".xml"); 

  5. #5
    And grazie per l'aiuto ma non riesco ancora a capire.
    Scusami io sono nuovo su AS3 e mi riesce un po' difficile adeguarmi alla nuova logica.

    Io ho questo codice nella classe:

    package
    {
    import caurina.transitions.Tweener;
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.MouseEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class MainClass extends MovieClip
    {
    //setting variables
    private var urlLoader:URLLoader;
    private var xml:XML;
    private var thumb:MovieClip;
    private var loader:Loader;

    public function MainClass() {
    urlLoader = new URLLoader();
    urlLoader.load(new URLRequest("xml/videos_"+xml_string+".xml"));
    urlLoader.addEventListener(Event.COMPLETE, loadXML);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorXML);

    this.addEventListener(MouseEvent.CLICK, click);
    }
    private function errorXML(e:IOErrorEvent):void
    {
    trace("xml was not loading, check xml path");
    }

    private function loadXML(e:Event):void

    eccetera...
    Il mio parametro dinamico che viene pescato dalla timeline è xml_string.
    Sulla timeline ho questo che spero sia corretto:

    var xml_string:* = "miodatabase";

    Applicando quello che tu mi dici, il risultato è:
    ArgumentError: Error #1063: Incongruenza nel conteggio degli argomenti su MainClass(). Era atteso 1, è stato ricevuto 0.

    La classe l'ho modificata così:

    package
    {
    public class MainClass extends MovieClip
    {
    private var urlLoader:URLLoader;
    private var xml:XML;
    private var thumb:MovieClip;
    private var loader:Loader;
    private var parametro:String;

    public function MainClass (xml_string:String) {
    parametro = xml_string;
    urlLoader = new URLLoader();
    urlLoader.load(new URLRequest("xml/videos_"+xml_string+".xml"));
    urlLoader.addEventListener(Event.COMPLETE, loadXML);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorXML);

    this.addEventListener(MouseEvent.CLICK, click);
    }
    private function errorXML(e:IOErrorEvent):void
    {
    trace("xml was not loading, check xml path");
    }

    private function loadXML(e:Event):void

    eccetera....
    Grazie per l'aiuto.

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, vedi è come ti dicevo, a seconda di come hai scritto la classe e di cosa questa rappresenti, la soluzione sarà diversa.
    Nel tuo caso quella che hai scritto è con tutta probabilità una document class che usi nel tuo progetto flash collegandola al filmato nell'apposito campo di testo che si trova tra le proprietà del filmato.

    Una document class è una classe che racchiude in se la timeline principale e ne diventa vettore per i comportamenti che appunto la main timeline dovrà seguire.
    Praticamente diciamo che questa sostituirà la nostra root.

    Ecco, il fatto che sostituisca la nostra root fa anche in modo di eliminare le variabili che abbiamo definito nella timeline rendendole nulle, se fai ad esempio una semplice prova con una document class ridotta all'osso e fai un trace della proprietà che avevi definito, oltre alla proprietà "root" otterrai null sulla prima e [object Main] sulla seconda. Spero che a questo punto sia comprensibile il motivo di questi risultati.

    Codice PHP:
    // sul filmato metto solo questa riga
    var xml_string:String "test.xml";

    // gli collego la classe Main che avrà questa forma

    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        public class 
    Main extends MovieClip {
            public function 
    Main ():void {
                if (
    stageinit();
                else 
    addEventListener(Event.ADDED_TO_STAGEinit);
            }
            private function 
    init (evt:Event null):void {
                
    removeEventListener(Event.ADDED_TO_STAGEinit);
                
    trace(root.xml_string); // è uguale scrivere questa o la riga successiva
                
    trace(xml_string);
                
    trace(root);
                
    trace(this); // restituisce lo stesso valore della riga precedente perché la classe Main, in quanto document class, equivale a root, ossia alla timeline principale del filmato
            
    }
        }

    In finale, usare una variabile sulla timeline non ha senso in questo caso, considerato che la classe che usiamo sostituirà poi la stessa timeline, di conseguenza la cosa migliore sarà ancora quella di scrivere la stringa direttamente nel codice della classe.

    Ora una domanda mi giunge spontanea rispetto a quello che ho visto e a quanto ti ho scritto: a cosa ti servirebbe scrivere il nome dell'xml sulla timeline invece che direttamente sulla classe?

  7. #7
    Grazie per la spiegazione, ora è un po' più chiaro.
    In definitiva la mia struttura è questa:
    Ho un contenitore .fla che fa da Main, questo a sua volta carica un menù XML e questo lettore video gallery.
    Quando "clicco" su un link del menù, il lettore deve capire che il foglio XML della gallery video deve cambiare in base al menù "cliccato".
    Per cui pensavo: definisco una variabile sulla timeline che, quando "clicco" sul menù la va a modificare e il lettore legge il cambiamento adeguando il paramtro che definisce la path al foglio XML.
    E' una cosa che in AS2 ho usato spesso per generare galleries dinamiche utilizzando lo stesso generatore di photo galleries o video galleries.
    Pensavo di riportare la filosofia in AS3; per cui sono riuscito a costruirmi in AS3 tutto il sito ma mi sono piantato su questa cosa, per cui tutti i miei richiami sono nulli e quindi non gira niente per come deve girare... purtroppo!

    Ora provo ad applicare questo tuo suggerimento sperando di riuscirci, altrimenti mi porterò tutto in AS2 anche se mi sarebbe piaciuto iniziare a lavorare anche in AS3.

    Ti ringrazio ancora per i suggerimenti e, se in merito al risultato che devo ottenere hai una soluzione alternativa, sarò curioso di scoprire qual'è :-)

    Grazie ancora.

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Trovo un po' di incongruenza tra quanto hai scritto e il codice che hai presentato, come fai a caricare ogni volta una galleria diversa? A cosa fa riferimento esattamente la classe che hai scritto, alla timeline di questa galleria? In questo caso bisogna anche capire come carichi la galleria. Le informazioni che hai dato fino ad ora sono troppo frammentate per aiutarti a trovare una soluzione.

  9. #9
    Ho scritto ogni cosa a sè, nel senso che la gallery ha una sua classe, il menù un'altra ecc.....
    Non so appunto se sia corretto, ma come ti ripeto sono nuovo su questa logica di programmazione e ho impostato il tutto così perchè mi sembrava più giusto in base a quello che ho letto.

    La galleria diversa pensavo di caricarla in quel modo lì che ti ho descritto precedentemente; pensavo che impostando una variabile dinamica potessi dirgli cosa andare a pescare di volta in volta, la cosa che sto cercando di scoprire è se su AS3 a classi posso utilizzare questa filosofia oppure mi devo spostare su altro tipo di logica anche per queste cose.
    Altra cosa che pensavo visto quello che mi hai spiegato è: se passo direttamente dalla mia classe del mnù alla classe della gallery la variabile per dirgli che foglio XML caricare?
    Può essere una cosa più giusta? Così dovrei eliminare il problema della timeline che mi dicevi.

    Tanto tutti e due i filmati vengono inglobati dallo stesso contenitore principale, per cui non dovrebbe essere problematico farli dialogare... spero!

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da IZA
    Ho scritto ogni cosa a sè, nel senso che la gallery ha una sua classe, il menù un'altra ecc.....
    Non so appunto se sia corretto, ma come ti ripeto sono nuovo su questa logica di programmazione e ho impostato il tutto così perchè mi sembrava più giusto in base a quello che ho letto.

    La galleria diversa pensavo di caricarla in quel modo lì che ti ho descritto precedentemente; pensavo che impostando una variabile dinamica potessi dirgli cosa andare a pescare di volta in volta, la cosa che sto cercando di scoprire è se su AS3 a classi posso utilizzare questa filosofia oppure mi devo spostare su altro tipo di logica anche per queste cose.
    Altra cosa che pensavo visto quello che mi hai spiegato è: se passo direttamente dalla mia classe del mnù alla classe della gallery la variabile per dirgli che foglio XML caricare?
    Può essere una cosa più giusta? Così dovrei eliminare il problema della timeline che mi dicevi.

    Tanto tutti e due i filmati vengono inglobati dallo stesso contenitore principale, per cui non dovrebbe essere problematico farli dialogare... spero!
    Scusami ma in questi giorni sono veramente tardo a capire. Ricapitoliamo e vediamo se riesco:

    1) Tu hai un filmato e una document class chiamata MainClass
    2) Hai un'altra classe che richiami da MainClass e genera un menù
    3) Hai ancora una classe che richiami di volta in volta dal menù per generare una galleria di video diversa a seconda del file xml che gli viene passato.
    4) Il primo avvio della galleria viene gestito dalla MainClass perciò pensavi di partire da lì usando una variabile che avevi definito nella timeline del filmato.

    Se non mi sono perso e mi confermi tutto questo, possiamo proseguire.
    Ah, se mi dai conferma di questo dovresti anche inserire il frammento di codice in cui i pulsanti "creano" la galleria ogni volta che vengono cliccati.

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.