Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69

    [AS3] problema con gestione timeLine external swf

    Ciao a tutti

    Sto cercando di gestire la timeline di un swf esterno caricato all'interno del mio main.fla

    Il codice che sto utilizzando è questo:

    Codice PHP:
    var carCont:*;
    var 
    ext:MovieClip=carCont;
    var 
    swf:String "external.swf";
    var 
    caricatore:Loader  = new Loader();
    caricatore.load(new URLRequest(swf));
     
    pulsante_mc.addEventListener(MouseEvent.CLICKonClick);
     
    function 
    onClick(event:MouseEvent):void {
     
    var 
    carCont:*=caricatore.content;
    addChild(caricatore);
    ext.gotoAndPlay(2);

    Ma ho questa notfica di errore:

    TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
    at appunti_fla::MainTimeline/frame1()

    Come potrei fare per risolvere?

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se non è verificato che il caricamento esterno sia andato a buon fine, non è possibile gestire la timeline del file esterno.

    Codice PHP:
    var caricatore:Loader Loader(addChild(new Loader()));
    caricatore.contentLoaderInfo.addEventListener(Event.INITinit);
    caricatore.load(new URLRequest("external.swf"));
    function 
    init (e:Event) {
        
    pulsante_mc.addEventListener(MouseEvent.CLICKonClick);
    }
    function 
    onClick(event:MouseEvent):void {
        var 
    ext:MovieClip MovieClip(caricatore.content);
        
    ext.gotoAndPlay(2);


  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Grazie And!

    Avevo il sospetto fosse questo il problema....ma non sapevo da dove partire per affrontarlo.
    In effetti mi ero incastrato provando l'ADDED_TO_STAGE all'interno del swf esterno, ma senza capire bene come utilizzarlo.

    Provo immediatamente la tua soluzione.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Funziona perfettamente, inoltre hai messo anche un po' d'ordine nel mio codice.

    Ora vorrei farti un'altra domanda:

    a tuo giudizio, i listener che gestiscono il ROLL OVER e il ROLL OUT di "pulsante_mc" conviene metterli all'interno della funzione "init()", oppure è meglio gestirli separatamente?

    Ciao e grazie ancora.

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Mah, il rollover e rollout volendo li puoi mettere anche fuori, salvo che non effettuino azioni che coinvolgono quello stesso file esterno, ma credo di no.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Rieccomi dopo qualche giorno di studio.

    Sto cercando di implentare quanto appreso prima, per creare una classe esterna (Principale.as) da associare al mio fla. Questa classe contiene due array.

    Il primo è un array delle istanze del menù principale
    Il secondo è un array dei path dei file.swf esterni che dovranno essere caricati

    Tutti i file.swf esterni hanno animazioni su timeline con intro e outro
    Il mio scopo è di controllarne la timeline

    ecco la classe (in fase di costruzione):

    Codice PHP:
    package myClasses
    {
        
    import flash.net.URLRequest;
        
    import flash.display.*;
        
    import flash.events.*;


        public class 
    Principale extends MovieClip
        
    {

            var 
    swf:String;
            var 
    caricatore:Loader;


            public function 
    Principale ()
            {
                
    inizia ();
            }



            function 
    inizia ():void
            
    {

                
    mainButton_array = new Array
                (
                 
    home_btn,
                 
    section1_btn,
                 
    section2_btn,
                 
    section3_btn
                 
    );

                
    sezioni_array = new Array
                (
                 
    "sito_sezioni/home.swf",
                 
    "sito_sezioni/section1.swf",
                 
    "sito_sezioni/section2.swf",
                 
    "sito_sezioni/section3.swf"
                
    );

                for (var 
    i:Number=0sezioni_array.lengthi++)
                {
                    
    swf sezioni_array[i];
                    var 
    caricatore:Loader  = new Loader();
                    
    caricatore.load (new URLRequest(swf));
                    
    addChild (caricatore);
                    
    caricatore.contentLoaderInfo.addEventListener (Event.INITcontrollaSezioni);
                }
            }

            }


            function 
    controllaSezioni (event:Event):void
            
    {
                for (var 
    i:int=0mainButton_array.lengthi++)
                {
                    
    mainButton_array[i].addEventListener (MouseEvent.CLICKonClick);
                }
            }

            function 
    onClick (event:MouseEvent):void
            
    {
                var 
    ext:MovieClip MovieClip(caricatore.content);
                
    trace(ext);
            }


        }

    alla fine ho messo un trace(ext);

    che mi dà il solito errore di prima :


    TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
    at myClasses::Principale/onClick()


    evidentemente c'è qualcosa che non va. Dove sbaglio?

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Dentro a quella funzione "caricatore" non esiste perchè la stai creando in un'altra funzione che non è collegata all'oggetto.
    Ci sono un po' di cose che non vanno nella classe, se ricrei ogni volta "caricatore", non avrai mai un riferimento preciso al caricatore che effettivamente devi usare e quindi "onClick" non saprà neanche cosa dovrebbe cercare.
    Meglio che ti crei un array per ospitare i caricatori che usi, anche se... aspetta ma non devi utilizzare un solo caricatore che carichi e scarichi i filmati dall'esterno? O i filmati già caricati devono restare sullo stage?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Il mio obiettivo finale, a cui sto cercando di arrivare per gradi è di:

    1 - caricare e scaricare i filmati esterni alla pressione di differenti pulsanti.
    2 - avere delle transizioni in uscita ed in entrata

    Con questo tentativo ho pensato che avrei potuto caricare tutti i filmati insieme (i filmati esterni hanno il primo frame vuoto), per poi controllarne la timeline in un secondo momento.
    Ma forse non è la strada migliore per arrivare dove voglio arrivare io.

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non è malvagia come idea, anche se avrai un po' di risorse occupate per via del caricamento multiplo, volendo potresti fare tutto con un solo Loader, ma ponendo di seguire la strada che hai descritto, dovresti muoverti un tantino meglio con i caricatori, usa un array anche per quelli, o ancora meglio, per far sì che funzioni tutto il meccanismo, inserisci ogni loader dentro un movieclip, in modo che in questo stesso movieclip potrai aggiungere delle variabili da sfruttare poi nelle varie funzioni della classe.
    Io la classe la vedrei così:
    Codice PHP:
    package myClasses {
        
    import flash.display.Loader;
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        
    import flash.net.URLRequest;
        public class 
    Principale extends MovieClip {
            private var 
    array_pulsanti:Array;
            private var 
    array_sezioni:Array;
            private var 
    array_caricatori:Array;
            public function 
    Principale () {
                
    array_pulsanti = [home_btnsection1_btnsection2_btnsection3_btn];
                
    array_sezioni = ["sito_sezioni/home.swf""sito_sezioni/section1.swf""sito_sezioni/section2.swf""sito_sezioni/section3.swf"];
                
    array_caricatori = [];
                
    array_sezioni.forEach(__foreach__);
            }
            private function 
    __foreach__ (e:*, i:uinta:Array) {
                
    array_pulsanti[i].index i;
                
    array_caricatori.push (addChild(new MovieClip()) as MovieClip);
                
    array_caricatori[i].caricatore array_caricatori[i].addChild(new Loader());
                
    array_caricatori[i].pulsante array_pulsanti[i];
                
    array_caricatori[i].caricatore.load (new URLRequest(e));
                
    array_caricatori[i].caricatore.contentLoaderInfo.addEventListener(Event.INIT__init__);
            }
            private function 
    __init__ (e:Event) {
                var 
    c:MovieClip MovieClip(e.target.loader.parent);
                
    c.pulsante.addEventListener(MouseEvent.CLICK__click__);
            }
            private function 
    __click__ (e:MouseEvent) {
                var 
    ext:MovieClip array_caricatori[e.target.index].caricatore.content;
                
    trace(ext);
            }
        }

    Salvo che non mi sia scordato qualche import, dovrebbe funzionare già così.
    Se mi confermi il funzionamento, passiamo poi ad analizzarla.

    [edit] C'era un errore nei nomi che ho corretto, spero che non ce ne siano altri simili.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Intanto grazie ancora.

    Testo e mi studio la tua versione e poi ti faccio sapere.

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.