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

    root e parent mi stanno mandando al manicomio!!

    Salve a tutti, io nn riesco a capire come gestire root e parent....

    Allora, vi posto il problema:

    Ho un filmato principale nel quale c'è un clip chiamato "Istancename_3" nel quale c'è una fotografia...

    Sempre nel filmato principale carico un swf esterno nel quale c'è un clip contentente un pulsante istanziato "gallery"...QUesto pulsante gallery al click dovrebbe portarmi l' "Istancename_3" ad alpha 0 e faccio in questo modo:

    Codice PHP:
    import caurina.transitions.*
    gallery.buttonMode true;
    gallery.mouseChildren false;

    gallery.addEventListener(MouseEvent.CLICKcarica_foto);

    function 
    carica_foto(e:MouseEvent){
    Tweener.addTween(MovieClip(root).InstanceName_3,{alpha:0,time:1,transition:"easeOutExpo"})

    Mi sa che ho problemi ad interagire cn gli elementi dello stage principale tramite gli swf caricati all'interno dello stesso, non mi da nessun errore di debug ma non esegue la tween...


    Help me please
    http://www.generationweb.it <--- web site

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non è il genere di sistema che uso per gestire i miei lavori, quindi non sono certo al 100% che sia come ti dico, ma... mi pare che root faccia riferimento di volta in volta alla timeline principale dell'swf a cui appartiene, quindi anche se questo viene caricato in un altro clip, avrà sempre la sua root, che non coinciderà con quella del clip principale.

    Da un po' io uso una tecnica pressoché infallibile, che consiste nell'uso di una classe "singleton" in cui registro una serie di variabili che mi servono nel corso del filmato. In questo modo, una volta che ho registrato la root principale, non dovrò fare altro che richiamarla dove voglio semplicemente con il nome che ho stabilito.

    La classe è molto semplice:

    Codice PHP:
    package {
        
    dynamic public class Register {
            private static var 
    instance:Register;
            private static var 
    allowInstantiation:Boolean;
            public function 
    Register ():void {
                if (!
    allowInstantiation) throw new Error("La classe è di tipo singleton, usare il metodo statico Register.getInstance() per ottenerne l'istanza");
            }
            public static function 
    getInstance ():Register {
                if (!
    instance) {
                    
    allowInstantiation true;
                    
    instance = new Register();
                    
    allowInstantiation false;
                }
                return 
    instance;
            }
        }

    Va inserita in un file che si deve chiamare "Register.as", da mettere nella stessa cartella del fla che ne fa uso.

    All'interno di flash poi la richiameremo in questo modo nel filmato principale:

    Codice PHP:
    Register.getInstance().main this
    E troveremo quella stessa proprietà in ogni filmato che richiameremo dall'esterno:

    codice:
    import caurina.transitions.*;
    gallery.buttonMode = true; 
    gallery.mouseChildren = false; 
    
    gallery.addEventListener(MouseEvent.CLICK, carica_foto); 
    
    var main:MovieClip = Register.getInstance().main as MovieClip;
    function carica_foto(e:MouseEvent){ 
    Tweener.addTween(main.InstanceName_3,{alpha:0,time:1,transition:"easeOutExpo"}) 
    }

  3. #3
    Faccio una prova sembra interessante...praticamente dichiari la root e in ogni file basta includere il file register.as in modo da richiamarla.....


    provo e ti faccio sapere
    http://www.generationweb.it <--- web site

  4. #4
    Cavolo ma sei un grande!!

    Quindi ogni volta che volessi rikiamare un elemento sullo stage principale basta fare

    var main:MovieClip = Register.getInstance().main as MovieClip;

    e poi metterci la funzione che voglio....
    http://www.generationweb.it <--- web site

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Certamente, ovvio poi che avendo a disposizione questo "registro", lo puoi sfruttare per ogni altra variabile globale di cui avessi necessità.

  6. #6
    ah quindi è come se fosse un vecchio _global di AS2...
    http://www.generationweb.it <--- web site

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Diciamo di sì, anche se è sintatticamente più corretto quando si ha a che fare con la programmazione ad oggetti, però diciamo che in pratica il suo uso è quello.
    Poi si può anche estendere, ad esempio ponendo di avere delle costanti da usare continuamente nel filmato (mi viene in mente ad esempio un TextFormat per i campi di testo), la registri nella classe e la usi dove vuoi senza rischiare di sovrascriverla:

    codice:
    package { 
        import flash.text.TextFormat;
        dynamic public class Register { 
            private static var instance:Register; 
            private static var allowInstantiation:Boolean; 
            public function Register ():void { 
                if (!allowInstantiation) throw new Error("La classe è di tipo singleton, usare il metodo statico Register.getInstance() per ottenerne l'istanza"); 
            } 
            public static function getInstance ():Register { 
                if (!instance) { 
                    allowInstantiation = true; 
                    instance = new Register(); 
                    allowInstantiation = false; 
                } 
                return instance; 
            } 
            public static const BASE_TEXT_FORMAT:TextFormat = new TextFormat("_sans", 12, 0xCCCCCC);
        } 
    }
    E nel filmato la usi richiamando direttamente Register.BASE_TEXT_FORMAT.
    Insomma le possibilità sono molteplici, utilizzando una sintassi corretta e aumentando il controllo che si ha sul filmato, senza disperdere le variabili in giro per i filmati.

  8. #8
    Ciao And...nn riesco a capire una cosa....mi funziona benissimo la tua classe, l'unico problema che sto riscontrando è questo:

    Non interagisco con un clip nella root principale che mi dovrebbe caricare un swf esterno....


    Ti spiego...Nello stage principale ho istanziato un caricatore ad un clip filmato

    Codice PHP:
    var galleria:Loader = new Loader(); 
    fotogallery.addChild(galleria); 
    A questo punto l'swf esterno (chiamato "banqueting") caricato sullo stage principale ha un pulsante che mi fa le seguenti azioni

    Codice PHP:

    var main:MovieClip Register.getInstance().main as MovieClip; (questa è la tua classe che richiamo)

    function 
    carica_foto(e:MouseEvent){ 
    Tweener.addTween(main.InstanceName_3,{alpha:0,time:1,transition:"easeOutExpo"})
    Tweener.addTween(main.cornice.chiudi,{x:578,y:7,time:1,transition:"easeInOutExpo"})
    Tweener.addTween(main.cornice.close_gallery,{x:578,y:337,time:1,transition:"easeInOutExpo"})
    Tweener.addTween(main.caricatore,{y:y+260,time:1,transition:"easeInOutExpo"})
    main.fotogallery.load(new URLRequest("gallery_banqueting.swf"));

    Mi funziona tutto, interagisce con gli oggetti ma l'unica cosa che non mi funziona è questa

    Codice PHP:
    main.fotogallery.load(new URLRequest("gallery_banqueting.swf")); 
    dandomi il seguente errore:

    TypeError: Error #1006: load non è una funzione.
    at banqueting_fla::Simbolo4_4/carica_foto()
    http://www.generationweb.it <--- web site

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Beh è chiaro che non ti funziona, quando richiami "fotogallery" non stai richiamando un Loader ma un non meglio precisato oggetto che contiene un loader, per questo non puoi usare la funzione. Se fotogallery è un movieclip puoi fare così
    Codice PHP:
    fotogallery.loader fotogallery.addChild(new Loader()) as Loader
    E poi richiami
    Codice PHP:
    main.fotogallery.loader.load(new URLRequest("file_esterno.swf")); 

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.