+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 11

removeEventListener non funzionante - dove erro

This is a discussion on removeEventListener non funzionante - dove erro within the Actionscript 3.0 base forums, part of the Flash Italiano category; ciao a tutti .... io odiooooooooooooooo i listenerrrrrrrrrrrrrrrrrrrr :-p che dire non mi funge il remove ecco il codice incriminato ...

  1. #1
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44

    removeEventListener non funzionante - dove erro

    ciao a tutti ....
    io odiooooooooooooooo i listenerrrrrrrrrrrrrrrrrrrr :-p

    che dire non mi funge il remove ecco il codice incriminato o almeno credo


    Code:
    		private function move_xs(e:Event)
    		{
    			
    			e.target.scaleY=e.target.scaleX+=(pfx-e.target.scaleX)/9;
    			if(Math.abs(e.target.scaleX-pfx)<0.005)
    			{
    				trace("into")
    				e.target.scaleY=e.target.scaleX=pfx;
    				e.target.removeEventListener(Event.ENTER_FRAME,non)
    			}
    
    			
    
    		}
    thanks------------------------------------------------------


    DI SEGUITO LA CLASS COMPLETA

    Code:
    package
    {
    	import flash.display.*;
    	import flash.events.*;
    
    	public class Main extends MovieClip
    	{
    		private var mio_mc:MovieClip;
    		private var pfx:Number;
    
    
    		private var speed:Number=9;		
    		
    		public function Main()
    		{
    			stage.frameRate=40;
    			mio_mc=mc0;
    			initializer_listener(mio_mc);
    		}
    		
    		
    		//inizializzazione listener
    		private function initializer_listener(mc:MovieClip)
    		{
    			mc.addEventListener(MouseEvent.ROLL_OVER,mc_over)
    			mc.addEventListener(MouseEvent.ROLL_OUT,mc_out)
    		}
    		
    		
    		//over
    		private function mc_over(e:Event)
    		{
    			pfx=1.2;
    			e.target.addEventListener(Event.ENTER_FRAME,move_xs);
    		}
    		//out
    		private function mc_out(e:Event)
    		{
    			pfx=1;
    			e.target.addEventListener(Event.ENTER_FRAME,move_xs);
    		}
    
    		
    		//move_xs
    		private function move_xs(e:Event)
    		{
    			
    			e.target.scaleY=e.target.scaleX+=(pfx-e.target.scaleX)/9;
    			if(Math.abs(e.target.scaleX-pfx)<0.005)
    			{
    				trace("into")
    				e.target.scaleY=e.target.scaleX=pfx;
    				e.target.removeEventListener(Event.ENTER_FRAME,non)
    			}
    
    			
    
    		}
    		
    		//null
    		private function non(e:Event){trace("no")}
    
    	}
    }

  2. #2
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Ciao :)
    Dunque,
    la prima cosa che mi sembra alquanto strana ( ma forse ne hai necessità per ragioni che non si vedono nella tua classe ) è che dal rollover e rollout chiami giustamente i corrispettivi metodi ( mc_over e mc_out ) ma questi due metodi, ecco la cosa strana, chiamano a loro volta con intervallo ENTER_FRAME una identica funzione (move_xs). Quindi quando il mouse è sulla clip e anche quando esce dalla clip tu chiami lo stesso identico codice.

    La seconda cosa che salta all' occhio è un errore nel metodo move_xs, quando chiami questa riga:

    e.target.removeEventListener(Event.ENTER_FRAME,non )

    in quella riga stai dicendo a mc:
    rimuovi il listener che ha scaturito l' evento event ( chedovrebbe essere null in quanto all' interno della funzione hai chiamato il parametro che viene passato ' e ' e non event e in più gli dici di fermare un ENTER_FRAME che chiama una funzione con nome ' non ' , che non c'è nella classe un evento ENTER_FRAME che chiama la funzione ' non ' :confused:

  3. #3
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    ehmmmmmmm........
    innanzituttto thanks per la pazienza ehehehe

    e che in realta vengo da una pgm prevalentemente procedurale e forse sto cercando similitudine con la OOP inesistenti

    ho richiamato lo stesso metodo sia in over che in out perche io la continuo a vedere come una funzione con parametro
    quindi per me move_x serve a zoommare la clip alle dimesioni del valore del parametro , e riscrivirla due vole una per l'over e un per l'out mi sembra codice ripetuto.....e da quanto ho capito tu dici che in OOP sta cosa è errata o sbaglio?

    ......
    per quanto riguarda il metodo "non" lo sto richiamando semplicemente perche
    al "removeEventListener(evento,funzione)"
    se non passo una funzione qualsiasi mi da sempre errore ho provato a metterci null undefined ecc. ma niente sempre errore

    ..........
    per quanto riguarda
    e.target ...lo sto usando per riferirmi all'mc .......perche vorrei appunto eliminare l'enterframe alla fine dello zoom

    io sto immaginandoche e.target mi faccia sempre riferimento alla clip mio_mc non so se sto errando quindi
    e.target.removeEventListener(evento,funzione)
    secondo questa logica mi rappresenta il vecchio
    delete this.onEnterFrame

    .................
    che dire flep sto leggendo leggendo e provando ma qui ho sempre un po confuszione se riuscissi a chiarirmi un po piu le idee sarei contentissimo

    ..........

    infine per eliminare l'enterframe tu cosa mi consigli

  4. #4
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Quote Originally Posted by mariano.martucci View Post
    ehmmmmmmm........
    innanzituttto thanks per la pazienza ehehehe

    e che in realta vengo da una pgm prevalentemente procedurale e forse sto cercando similitudine con la OOP inesistenti

    ho richiamato lo stesso metodo sia in over che in out perche io la continuo a vedere come una funzione con parametro
    quindi per me move_x serve a zoommare la clip alle dimesioni del valore del parametro , e riscrivirla due vole una per l'over e un per l'out mi sembra codice ripetuto.....e da quanto ho capito tu dici che in OOP sta cosa è errata o sbaglio?
    ops....pardon, chiedo scusa, non avevo visto che cambiavi il valore di pfx...mancanza mia...

    ......
    per quanto riguarda il metodo "non" lo sto richiamando semplicemente perche
    al "removeEventListener(evento,funzione)"
    se non passo una funzione qualsiasi mi da sempre errore ho provato a metterci null undefined ecc. ma niente sempre errore
    per chiamare il metodo 'non', dopo che hai fermato ENTER_FRAME:
    fermi prima ENTER_FRAME in questo modo:
    e.target.removeEventListener(Event.ENTER_FRAME,mv_ out);
    e.target.removeEventListener(Event.ENTER_FRAME,mv_ over);
    devi per forza fermarli tutti e due perchè dal tuo codice Flash non sa distinguere quale sta correndo in quel momento.

    Poi, subito dopo, chiami:
    non(); ( non ti serve passargli un evento credo, dipende da cosa vuoi fare dopo... ). E il metodo non lo implementi in questo semplice modo:
    private function non():void
    {
    trace("no")
    }

    Un' altra cosa importante, è che quando chiami
    e.target.addEventListener(Event.ENTER_FRAME,move_x s);
    devi prima rimuovere il medesimo enterframe perchè altrimenti esempio:
    il mouse va sulla clip, chiami un enterframe, quando esci dalla clip devi rimuoverlo altrimenti lui corre sempre... non so se mi sono spiegato.
    E lo devi fare anche viceversa, cioè quando chiami enterframe da mc_out, prima devi fermarlo perchè sta correndo sempre chiamando la funzione mc_over ;)

    Quando fai un removeListener, non chiami allo stesso tempo un' altra funzione da quel comando.
    Quel comando ferma enterframe e basta.
    Ti serve un' altra riga per chiamare la funzione non come ti ho spiegato sopra :)

  5. #5
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    thanks flep ora sembra tutto piu chiario ....:)
    per quanto riguarda eliminare l'enterframe all'inizio dell'over ed out ....eh si hai ragione non c'avevo fatto caso :stup:

  6. #6
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Quote Originally Posted by mariano.martucci View Post
    thanks flep ora sembra tutto piu chiario ....:)
    per quanto riguarda eliminare l'enterframe all'inizio dell'over ed out ....eh si hai ragione non c'avevo fatto caso :stup:
    E' una cosa fondamentale :)

    Ho conosciuto diversi bravissimi programmatori Java, che facevano appunto una fatica immane a capire queste cose, semplicemente perchè non avevano ancora ben chiaro il concetto di timeline e di intervallo ENTER_FRAME.

    ENTER_FRAME, chiama un metodo da te dichiarato tante volte al secondo pari al valore del frame rate del tuo progetto.
    Quindi, se abbiamo un frame rate di 40, ENTER_FRAME chiamerà la funzione move_xs 40 volte al secondo.

    Se tu chiami ENTER_FRAME che chiama move_xs da due distinti listener - eventi , a quel punto, sì i listener sono 2 ma ENTER_FRAME chiama una unica funzione, per cui prima di chiamare in causa ENTER_FRAME bisogna che lo annulli o lui continua fedelmente ad eseguire move_xs con il primo valore di pfx ;)

  7. #7
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    flep ho implementato in questo modo....
    ma il remove sembra non andare.....

    :wall:

    Code:
    		//over
    		private function mc_over(e:Event)
    		{
    			pfx=1.2;
    			e.target.removeEventListener(Event.ENTER_FRAME,mc_out);
    			e.target.addEventListener(Event.ENTER_FRAME,move_xs);
    		}
    		//out
    		private function mc_out(e:Event)
    		{
    			pfx=1;
    			e.target.removeEventListener(Event.ENTER_FRAME,mc_over);
    			e.target.addEventListener(Event.ENTER_FRAME,move_xs);
    		}
    		//click
    		private function mc_click(e:Event)
    		{
    		    var targetURL:URLRequest = new URLRequest("http://www.google.it/");
    		    navigateToURL(targetURL,"_blank");
    		}
    
    
    
    		
    		//move_xs
    		private function move_xs(e:Event)
    		{
    			
    			e.target.scaleY=e.target.scaleX+=(pfx-e.target.scaleX)/9;
    			if(Math.abs(e.target.scaleX-pfx)<0.005)
    			{
    				trace("into")
    				e.target.scaleY=e.target.scaleX=pfx;
    				e.target.removeEventListener(Event.ENTER_FRAME,mc_out); 
    				e.target.removeEventListener(Event.ENTER_FRAME,mc_over);
    			}
    		}

  8. #8
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Hai solo il metodo move_xs che chiami con ENTER_FRAME.
    Per cui addEventListener e removeEventListener nei metodi mc_over ed mc_out, si devono riferire solo in questo modo:
    Code:
    e.target.removeEventListener(Event.ENTER_FRAME,move_xs);
    e.target.addEventListener(Event.ENTER_FRAME,move_xs);

  9. #9
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    thanks flep per il tuo aiuto , spero un gg di poter ricambiare

    siccome adesso è tutto funzionante ........
    mi sorege un dubbio sulla mia comprensione dei listener allora

    correggimi se erro
    e.target.addEventListener(Event.ENTER_FRAME,move_x s);

    con questo codice registro su e.target un listener sull'evento enterframe
    e quando si scatena questo evento ad ogni frame lancio il metodo move_xs


    con
    e.target.removeEventListener(Event.ENTER_FRAME,mov e_xs);

    pensavo fosse uguale ovvero rimuovo il listener su e.target relativo all'enterframe e poi lancio il metodo move_xs

    invece a quanto sembra bisogna utilizzare lo stesso evento e la stessa chiamata usata per l'addListener altrimenti non lo rimuove

  10. #10
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Quote Originally Posted by mariano.martucci View Post
    invece a quanto sembra bisogna utilizzare lo stesso evento e la stessa chiamata usata per l'addListener altrimenti non lo rimuove
    Sì esatto.

    Ti faccio un esempio:
    se metti un listener in ascolto di Mariano che tira un calcio al pallone, gli dici di urlare goal all' arbitro, utilizzando il metodo megafono.
    Quando Mariano tira il calcio, il listener vede l' evento e chiama megafono, il quale urlerà GOAL.

    Per farlo smettere,devi dire a Mariano di rimuovere il listener in ascolto e per risalire a Mariano dal megafono devi chiamare la proprietà target dell' evento calcio al pallone.
    Una volta raggiunto chi ha dispacciato l' evento, rimuovi il listener descrivendo il tipo di evento ( calcio al pallone ) e il nome del metodo ( megafono ).

    :o

+ Reply to Thread
Page 1 of 2 1 2 LastLast

Similar Threads

  1. VideoCorso10 - Inerzia e removeEventListener
    By nar in forum Video corsi
    Replies: 2
    Last Post: 23-11-09, 06:07
  2. Tutorial non funzionante?
    By AmiFlash in forum Actionscript 3.0 base
    Replies: 0
    Last Post: 22-07-09, 08:24
  3. addChild dove?
    By Ga001 in forum Actionscript 3.0 avanzato
    Replies: 1
    Last Post: 26-05-09, 07:47
  4. pulsante non funzionante
    By debora76 in forum Flash CS3 Design
    Replies: 0
    Last Post: 06-12-08, 15:13
  5. Problema basilare con removeEventListener
    By cicobalico in forum Actionscript 3.0 base
    Replies: 0
    Last Post: 21-07-08, 08:52

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts