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

    [AS3] scatenare click del clip, forse dispatchEvent

    Se io ho

    codice:
    bottone.addEventListener(MouseEvent.CLICK, clickBottone);
    
    function clickBottone(e:MouseEvent){	
       var target = e.target
    }
    come faccio a scatenare l'evento senza cliccare ma da codice?

    Potrei lanciare direttamente clickBottone, ma poi come passo il parametro MouseEvent col target?

    Potrei modificare la funzione per accettare un secondo parametro opzionale, e usare quello, ma non mi pare troppo elegante.

  2. #2
    Trovato!

    bottone.dispatchEvent(new MouseEvent(MouseEvent.CLICK))

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Mmh, o non ho capito cosa chiedevi, oppure ti sbagli. Il dispatchEvent serve a "predisporre" un evento da utilizzare su un determinato oggetto.
    Se invece vuoi utilizzare la funzione che hai "cucito" sull'evento, devi impostarla in maniera un tantino differente.

    Codice PHP:
    function clickBottone (evt:MouseEvent null):void {
        if (
    evt != null) {
            
    trace(evt.target);
        } else {
            
    // azioni se la funzione non viene richiamata dall'evento
            
    trace(bottone);
        }
    }

    bottone.addEventListener(MouseEvent.CLICKclickBottone);
    clickBottone(); 

  4. #4
    In quel modo bottone sarebbe undefined (perchè creato dentro una funzione), non ho modo di recuperlarlo se non passandolo alla funzione (o legggendolo dall'evento).

    Comunque sta funzionando, non so se mi sono spiegato male.

    Quello che dovrei fare è quello che in AS2 era

    codice:
    pippo.onRelease=function(){
        trace(this)
    }
    
    pippo.onRelease()

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Sono curioso di vedere come funziona, se puoi mi dici esattamente come hai predisposto la cosa? Così provo a rifarlo e vedo come funge.

  6. #6
    Beh, è una semplice lettura di un xml, dal quale tramite ciclo dei nodi creo dei bottoni e li "addo" in un clip. Associo i listener over, out, click (tra l'altro ieri ho visto la diffirenza tra CLICK e MOUSE_UP, da quello che ho capito è che se io clicco e tengo premuto fuori dal bottone, vado sul bottone e rilascio, mi si scatena MOUSE_UP, il click invece funziona solo se cliccato e rilasciato nel bottone).

    Poi per simulare l'evento del mouse sul bottone raggiungo il bottone e uso il dispatch event.

    Stasera posto il codice, ora sono in un altro ufficio

  7. #7
    Non ho capito che cosa vuoi fare nel concreto, cmq quello che dici è corretto: il dispatchEvent serve, come dice il nome, per dispacciare un'evento.
    Ergo scrivere bottone.dispatchEvent(new MouseEvent(MouseEvent.CLICK)) è come se clicchi fisicamente col mouse sul bottone (o meglio, il bottone è come se simulasse di essere cliccato per capirci).
    Il dispatchEvent è anche alla base degli eventi personalizzati.

    Se mi creo un evento personalizzato, ad esempio
    Codice PHP:
    package
    {
        
    import flash.events.Event;
        
        public class 
    XMLEvent extends Event
        
    {
            public static const 
    COMPLETE:String "complete";
            public static const 
    ERROR:String "error";
            
            public var 
    xmlData:XML;
            
            public function 
    XMLEvent(type:Stringdata:XML)
            {
                
    super(type);
                
    xmlData data;
            }
            
            
    override public function clone():Event
            
    {
                return new 
    XMLEvent(typexmlData);
            }
        }

    Per "far partire" questo evento da qualche parte in un'altra classe avrò:

    dispatchEvent(new XMLEvent(XMLEvent.COMPLETE, xml));

    Che è comodo perchè è l'unico modo in AS3 di passare parametri con un'evento (al posto di xml potresti predisporre di passare un Object per esempio).

  8. #8
    Questo è quello che ho fatto per cliccare il primo bottone creato in automatico

    codice:
    function caricato(evento:Event){
    	myXML = new XML(evento.target.data);
    
    	var figli:XMLList = myXML.child("img");
    	
    	//metto i bottoni sx e dx sotto al ciclo for li posiziono
    	var sx:Sx = new Sx();
    	var dx:Dx = new Dx();
    	
    	sx.name="sx";
    	dx.name="dx";
    	
    	sx.alpha=0;	
    	dx.alpha=0;
    	sx.mouseChildren=false;
    	dx.mouseChildren=false;
    	
    	bottoni.addChild(dx);
    	bottoni.addChild(sx);	
    	
    	for (var i:int=0;i<figli.length();i++){
    		
    		var bottone:MovieClip = new Bottone() as MovieClip;
    		bottone.mouseChildren=false;
    		bottone.buttonMode=true;
    		
    		bottone.txtNumero.autoSize="left";
    		bottone.txtNumero.y = Math.round((bottone.height-bottone.txtNumero.height)/2)
    		bottone.txtNumero.x = Math.round((bottone.width-bottone.txtNumero.width)/2)		
    		
    		bottone.txtNumero.text = "0" + (i+1);
    		
    		bottone.x = bottone.width*i;		
    		
    		bottoni.addChild(bottone);
    		
    		TweenLite.from(bottone, .5, {alpha:0, delay:.15*(i+1)})
    		
    		
    
    		//leggo i dati del nodo e li metto nel bottone
    		var nodo:XML = new XML(figli[i]);
    		
    		bottone.big = nodo.attribute("big");
    		bottone.small = nodo.attribute("small");
    		bottone.ita = nodo.attribute("ita");
    		bottone.eng = nodo.attribute("eng");
    		bottone.align = nodo.attribute("align");
    		bottone.strX = nodo.attribute("x");
    		bottone.strY = nodo.attribute("y");
    		bottone.i = i;
    		bottone.name = "bt"+i;
    		
    		//listner		
    		bottone.addEventListener(MouseEvent.CLICK, clickBottone);
    		bottone.addEventListener(MouseEvent.MOUSE_OVER, over);
    		bottone.addEventListener(MouseEvent.MOUSE_OUT, out);	
    		
    		if (i==0){
    			bottone.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
    			bottone.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
    		}		
    	}
    sarebbe più carino metterlo fuori dal ciclo ma funziona, per capirci

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.