Visualizzazione dei risultati da 1 a 8 su 8

Discussione: eventi e listeners

  1. #1

    eventi e listeners

    Ciao a tutti,
    vi disturbo per una cosa che non mi risce di capire

    sto giocando un po' con gli .flv, inserisco in un campo testo (un componente textinput) il nome di un .flv e questo, quando clicco su un bottone (componente button), viene caricato e visualizzato(attraverso il mediadisplay component).

    L'actionscript si trova tutto nel primo fotogramma di root

    codice:
    //carico il componente
    import mx.controls.MediaDisplay
    createClassObject(MediaDisplay, "video", 10);
    
    video._x = 0 ;
    video._y = 0 ;
    
    /*
    L'istanza textinput si chiama flvname
    */
    flvname._x = video._x  ;
    flvname._y = video._height + 50 ;
    
    
    /*
    L'istanza del componente button si chiama btnLoad
    */
    
    //creo il listenr per l'evento click
    btnListener = new Object() ;
    
    btnListener.click = function(evt)
                        {
    	                //carica l'.flv
                            video.setMedia(flvname.text + '.flv', "FLV");
    					
                        }
    
    //Assegno il listener al button					
    btnLoad.addEventListener("click", btnListener)
    Fin qui funziona perfettamente

    Se però metto il bottone in un movieclip a parte, chiamato console1 non riesco ad assegnare l'evento...i percorsi sono giusti (infatti è riesco ad accedere a tutte le proprietà del button) ma non mi riesce di assegnare l'evento e al click non accade nulla.

    Dove sbaglio?

    codice:
    /*****
    non funziona 
    ****/
    import mx.controls.MediaDisplay
    createClassObject(MediaDisplay, "video", 10);
    
    
    //carico il movieclip con il bottone
    this.attachMovie('console', 'console1', 15) ;
    
    //creo il listener
    var consoleBtnListener = new Object() ;
    
    consoleBtnListener.click = function(evt)
                              {
    	                
                                  //carico l'flv
    		              video.setMedia(flvname.text + '.flv', "FLV");
    					   
    					
                               }	
    
    //assegno il listener				
    console1.btnLoad.addEventListener("click", consoleBtnListener)	;
    per favore NIENTE PVT TECNICI da sconosciuti

  2. #2
    codice:
    import mx.controls.MediaDisplay
    createClassObject(MediaDisplay, "video", 10);
    
    //carico il movieclip con il bottone
    this.attachMovie( 'console', 'console1', 15 );
    
    //creo il listener
    var consoleBtnListener:Object = new Object();
    consoleBtnListener.path = this;
    consoleBtnListener.click = function( evt:Object ):Void {
    	trace( "clicked !" );
    	this.path.video.setMedia( flvname.text + '.flv', "FLV" );
    }				
    console1.btnLoad.addEventListener( "click", this.consoleBtnListener );

    e se non basta metti subpath a consoleBtnListener ...
    codice:
    var consoleBtnListener:Object = new Object();
    consoleBtnListener.path = this;
    consoleBtnListener.subpath = console1;
    consoleBtnListener.click = function( evt:Object ):Void {
    	trace( "clicked !" );
    	this.path.video.setMedia( this.subpath.flvname.text + '.flv', "FLV" );
    }				
    console1.btnLoad.addEventListener( "click", this.consoleBtnListener );
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Ciao Andrea e grazie per la risposta, ho provato e non funziona....

    Se trascino manualmente dalla libreria l'istanza console1 sullo stage riesco ad assegnare l'evento (anche senza path o subpath), mentre se carico l'istanza da actionscript con attachMovie allora l'evento non viene assegnato.

    Temo che sia un problema simile a quello di cui avevamo parlato tempo fa, cioè che l'evento venga assegnato prima che l'istanza "attached" sia completamente presente.

    Prima di fare qualche altra prova ti chiedo una cosa che mi ha incuriosito: dove hai trovato le proprietà path e subpath? Sono proprietà di tutti i listener o dei listener da applicare ai Media components? Oppure semplicemente delle proprietà che hai creato tu?
    per favore NIENTE PVT TECNICI da sconosciuti

  4. #4
    un listener di fatto e' un Object() e un Object in flash ha tutti i valori che vuoi , a meno che non sia registrato.


    var ciao:Object = new Object();
    ciao.nome = "Pippo";
    ciao.cognome = "Pluto";
    ciao.path = _root;
    ciao.subpath = this;
    ciao.fabio = true;
    ciao.click = funciton( evt:Object ):Void {
    trace( this.nome ); // Pippo
    }
    bottone.addEventListener( "click", ciao );



    mentre per il resto non ho capito qual'e' la situazione ... ovvio che console1 , se e' un movieClip deve stare nello stage, altrimenti come lo usi ???
    o volevi dire l' istanza di video ... perche' devi essere sicuro che video sia creata, a me ad esempio non la crea con il tuo metodo
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Originariamente inviato da andr3a

    mentre per il resto non ho capito qual'e' la situazione ... ovvio che console1 , se e' un movieClip deve stare nello stage, altrimenti come lo usi ???
    Il fatto è che se console1 (istanza del movieclip console) lo metto manualmente nello stage (trascinandolo) funziona tutto, invece se lo metto al volo con attachMovie invece l'evento non viene assegnato.

    o volevi dire l' istanza di video ... perche' devi essere sicuro che video sia creata, a me ad esempio non la crea con il tuo metodo
    A me la crea...comunque non è quello il problema, il problema è l'assegnazione dell'evento al button che si trova all'interno del movieclip console1.
    Sembra il solito problema: quando un movieclip viene attached con actionscript ciò che si trova al suo interno diventa accessibile dopo un po', non immediatamente. Così riesco ad assegnargli l'evento solo se inserisco un ritardo tra l'attachmovie e addEventListener.
    Ho risolto mettendo l'attachMovie nel fotogramma 1 e addEventListener nel 2.
    immagino di poter fare meglio con il componente MovieClipLoader
    per favore NIENTE PVT TECNICI da sconosciuti

  6. #6
    ah ok, ora ho capito .... risolto cosi':

    codice:
    // creo un movieClip
    createEmptyMovieClip( "cs", getNextHighestDepth() );
    // gli attacco console ( nome linkage movieClip ) e lo chiamo myConsole
    cs.attachMovie( "console", "myConsole", getNextHighestDepth() );
    
    // start di onEnterFrame
    cs.onEnterFrame = function():Void {
    	
    	// listener bottone
    	var consoleBtnListener:Object = new Object();
    	consoleBtnListener.click = function( e:Object ):Void {
    		trace( "click" );
    	}
    	this.myConsole.bottone.addEventListener( "click", consoleBtnListener );
    	
    	// fermo l' onEnterFrame
    	delete this.onEnterFrame;
    }
    di fatto l 'onEnterFrame parte quando e' disponibile il primo frame di cs, frame che conterra' myConsole ...


    ... e' come se l'onEnterFrame saltasse il primo loop e passasse a quello dopo, mentre scrivere l'evento subito dopo l' attachMovie non viene registrato perche' e' nel frame "zero" del movieClip console e non ha ancora il bottone disponibile ... quel frame zero di cui ti avevo gia' parlato
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Originariamente inviato da andr3a

    ... e' come se l'onEnterFrame saltasse il primo loop e passasse a quello dopo, mentre scrivere l'evento subito dopo l' attachMovie non viene registrato perche' e' nel frame "zero" del movieClip console e non ha ancora il bottone disponibile ... quel frame zero di cui ti avevo gia' parlato
    Ottimo Andrea, funziona!

    Ho fatto una prova e pare andare bene anche senza creare il movieclip vuoto, abbinando l'assegnazione del listener a

    myConsole.onEnterFrame


    Ultima domanda: non posso abbinarlo all' onLoad di myConsole perchè altrimenti si ripresenta il problema del frame 0, vero?

    Grazie
    per favore NIENTE PVT TECNICI da sconosciuti

  8. #8
    Originariamente inviato da Fabio Heller
    Ottimo Andrea, funziona!

    Ho fatto una prova e pare andare bene anche senza creare il movieclip vuoto, abbinando l'assegnazione del listener a

    myConsole.onEnterFrame


    Ultima domanda: non posso abbinarlo all' onLoad di myConsole perchè altrimenti si ripresenta il problema del frame 0, vero?

    Grazie
    con MovieClipLoader in onLoad dovresti avere gia' disponibile il frame 1 , come da tests fatti, ma il problema con l' attach e' fine a se stesso, a prescindere che il movieClip sia gia' caricato o meno ... e' un altro problema, prende dalla libreria e attacca a frame zero, quindi devi lostesso utilizzare questo metodo.


    Non ne sono sicuro ma ne sono quasi convinto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.