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

    [AS3]Risalire ad un oggetto padre

    Il mio problema è il seguente:
    Ho un file swf che ha un menù. Questo menu carica altri file swf, in particolare c'è la voce 'indice' che nel file principale è invisibile
    codice:
    indice_mc.visible=false
    e la rendo visibile solo dopo aver caricato il file swf
    codice:
    private function completato(event:Event):void 
    {
    	addChild(loader);
    	preload_mc.visible=false;
            indice_mc.visible=true;	
    	swappa();
    }
    Il problema nasce quando, una volta caricato il file swf, io da quest'ultimo carico un ulteriore swf. In questo caso devo far scomparire la voce indice e lo devo fare dal primo swf caricato.
    Ricapitolando:
    1) io ho il file a.swf con la voce indice invisibile.
    2) a.swf fa due cose: carica b.swf e rende visibile 'indice'(che serve per tornare dietro)
    3) b.swf dovrebbe fare altre due cose: caricare c.swf e rendere di nuovo invisibile 'indice'

    Quindi la mia domanda è come controllare la visibilità della voce 'indice' da b.swf anche se questo è un pulsante che si trova in a.swf?
    E' sempre difficile spiegare bene queste cose..e spesro di essere stato chiaro

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Mi pare abbastanza in linea con la precedente discussione che hai aperto, se me lo confermi, è meglio unire questa alla precedente, per continuità e per non dover riprendere da capo le cose già dette e i consigli già dati.

  3. #3
    Quella precedente riguardava il caricamento degli swf....in questo la mia domanda è come accedere agli oggetti del swf principale (main.swf) dagli altri swf che apri dopo.
    Non so sè è la stessa domanda che ho già fatto nel post precedente...dimmi tu

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se tu mi dici che le ritieni due cose diverse, nessun problema, lasciamo le discussioni separate

    Per quanto riguarda la domanda, l'accesso al filmato esterno caricato deve essere effettuato all'interno della funzione associata all'Event.COMPLETE e puoi rintracciare l'oggetto attraverso la proprietà del loader "content"

    Codice PHP:
    private function completato (event:Event) {
        
    addChild(loader);
        
    trace(event.target.loader.content); // MovieClip
        
    var caricato:MovieClip event.target.loader.content;
        
    caricato.preload_mc.visible=false;
        
    caricato.indice_mc.visible=true;    

    Spero che sia comprensibile quello che intendo.

    [edit] No, ho travisato proprio alla grande il messaggio, perdonami... vedo di risponderti alla domanda corretta

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, allora in generale tutti gli mc (e filmati swf, che quando caricati vengono automaticamente tramutati in mc), hanno le proprietà parent, root e stage che rappresentano rispettivamente
    - l'elemento a cui viene agganciato l'mc o il filmato (nel caso del loader dovrebbe essere il loader stesso)
    - la timeline del filmato principale che carica tutti gli altri
    - lo stage che nella generalità delle situazioni si può assimilare a root, anche se essendo un elemento di tipo Stage, potrebbe creare qualche problema in pubblicazione, rispetto all'uso di root

    le proprietà sopra elencate non sono sempre disponibili, ma qui entriamo troppo nel dettaglio, ti basta sapere che se hai un errore in pubblicazione quando provi a usare una delle proprietà elencate, è perchè l'oggetto da cui le stai richiamando è fuori dalla lista di visualizzazione (non ne è stato fatto l'addChild ecc...)

    Nel tuo caso specifico, direi che ti serve root e che dovresti poter accedere a indice_mc con root.indice_mc o root["indice_mc"].

  6. #6
    Ho provato come mi hai suggerito inserendo questo nella funzione associata all'evento Event.COMPLETE:
    codice:
    private function completato(event:Event):void 
    {
    	addChild(loaderSwf);
    	preload_mc.visible=false;
    	root["indice_mc"].visible=false;			
    }
    mi restituisce questo errore:
    ReferenceError: Error #1069: Impossibile trovare la proprietà indice_mc su org.FlepStudio.Illusion.Main e nessun valore predefinito presente.
    at org.FlepStudio.Illusion::Main/completato()

    Ho provato anche con root.indice_mc.visible=false ma in questo caso mi restituisce l'erroregia dalla pubblicazione del swf.

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, ma mi devi dire se nell'errore riconosci il percorso che dovrebbe avere il tuo filmato principale, cioè il "Main" del tuo filmato principale sta su "org.FlepStudio.Illusion"? Perchè in quel caso magari il nome è sbagliato o roba simile.

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ho fatto un test per riuscire a comprendere esattamente quello che ti succede e ho trovato un po' di difficoltà a risalire al filmato principale, dopo aver fatto due annidamenti.
    Ho usato tre Document Class, una per ogni file annidato, che si presentano in questo modo:

    Codice PHP:
    // main.as
    package {
        
    import flash.display.Loader;
        
    import flash.display.MovieClip;
        
    import flash.net.URLRequest;
        public class 
    main extends MovieClip {
            public function 
    main () {
                var 
    l:Loader addChild(new Loader()) as Loader;
                
    l.load(new URLRequest("primo.swf"));
            }
        }
    }

    // primo.as
    package {
        
    import flash.display.Loader;
        
    import flash.display.MovieClip;
        
    import flash.net.URLRequest;
        public class 
    primo extends MovieClip {
            public function 
    primo () {
                var 
    l:Loader addChild(new Loader()) as Loader;
                
    l.load(new URLRequest("secondo.swf"));
            }
        }
    }

    // secondo.as
    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        public class 
    secondo extends MovieClip {
            public function 
    secondo () {
                
    addEventListener(Event.ADDED_TO_STAGEadded);
            }
            private function 
    added (event:Event) {
                if (
    this['parent']['parent']['parent'] != null) {
                    
    trace(this['parent']['parent']['parent']['root']);
                }
            }
        }

    I primi due effettuano solo i caricamenti a catena, quindi main carica primo e primo carica secondo, mentre il codice incriminato è quello di secondo che deve trovare, attraverso un annidamento di "parent", quello principale, che nel nostro caso è appunto "main". Così ad ogni annidamento successivo, bisogna aggiungere i parent per poter rintracciare la timeline principale e raggiungere gli elementi che ci interessano in questo modo.
    Direi che non è affatto comodo, ma è la soluzione più plausibile in un caso del genere.

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ma forse basta anche solo questo.
    Codice PHP:
    private function completato (event:Event) {
        
    addChild(loaderSwf);
        
    preload_mc.visible=false;
        
    parent["indice_mc"].visible=false;            


  10. #10
    Grandissimo Andy!!!
    In pratica ho dovuto utilizzarlo in questo modo:
    codice:
    private function completato(event:Event):void 
    {
    	addChild(loaderSwf);
    	preload_mc.visible=false;
            this['parent']['parent']['root'].indice_mc.visible=false;
    }
    ripetuto tre volte mi risaliva alla document class principale quindi ne ho tolto uno in modo da risalire nella document class che conteneva indice_mc e adesso funziona.
    Non so come ringraziarti per il tuo aiuto...sei un GRANDE!!

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.