In Actionscript 3.0 è necessario utilizzare addEventListener() per intercettare un qualsiasi evento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * Dato un MovieClip mc, si impostano eventi e handler */ mc.addEventListener( MouseEvent.CLICK, on_click ); mc.addEventListener( MouseEvent.ROLL_OVER, on_roll_over ); mc.addEventListener( MouseEvent.ROLL_OUT, on_roll_out ); /** * Funzioni di hander per gli eventi sopra indicati */ function on_click( e:MouseEvent ):void { // click } function on_roll_over( e:MouseEvent ):void { // roll over } function on_roll_out( e:MouseEvent ):void { // roll out } |
In alternativa è possibile usare la forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | mc.addEventListener( MouseEvent.CLICK, on_handler ); mc.addEventListener( MouseEvent.ROLL_OVER, on_handler ); mc.addEventListener( MouseEvent.ROLL_OUT, on_handler ); /** * Creo un'unica funzione per gestire tutti gli eventi */ function on_handler ( e:MouseEvent ):void { switch( e.type ) { case MouseEvent.CLICK: // click break; case MouseEvent.ROLL_OVER: // roll over break; case MouseEvent.ROLL_OUT: // roll out break; } } |








7
[...] Very short trick: addEventListener() AS3, un handler più eventi In Actionscript 3.0 è necessario utilizzare addEventListener() per intercettare un qualsiasi [...]
Ciao, mi piace come hai ottimizzato, ma ti chiedo una cosa, se avessi più di un solo MovieClip mc, tipo: mc1,mc2…..(potrebbero essere per esempio i pulsanti di un menù), come li gestisci?grazie
@Roberto:
Nella funzione
on_handlerpuoi fare riferimento all’oggetto di tipoEvent, in questo casoMouseEvent. Questo oggetto, infatti, ti permette di avere le informazioni sull’oggetto che ha ricevuto l’evento. Se provi in questo modo:2
3
4
trace(e.target.name);
// ...
}
La proprietà
target(ocurrentTarget) ti permetterà di sapere quale MovieClip hai selezionato.Vedi nel dettaglio la documentazione sia di
targetche dicurrentTargetche, anche se a prima vista sembrano del tutto identici, in alcuni casi (vedi bottoni complessi costruiti con più MovieClip annidati) possono darti la corretta informazione che cerchi.@Giovambattista Fazioli: vado subito a guardare…:)…gentile…in caso mi ripresento..:)
@Giovambattista Fazioli:
2
3
4
5
6
7
8
9
10
11
12
13
14
btn1_mc.addEventListener( MouseEvent.MOUSE_OUT, on_handler );
function on_handler ( e:MouseEvent ){
switch( e.type ) {
case MouseEvent.MOUSE_OVER:
trace(e.currentTarget.name);//funziona, visualizza "btn1_mc" ossia il nome dell'istanza del primo pulsante
btn1_mc.gotoAndPlay(2);
break;
case MouseEvent.MOUSE_OUT:
btn1_mc.gotoAndPlay(16);
break;
}
}
Quindi
funziona, ma come posso associarlo all’istruzione sucessiva? al posto di
@Roberto: è molto semplice:
e.targetè un puntatore all’istanza del MovieClip, quindi basta usare:In pratica
btn1_mc, o qualsiasi altra istanza, corrisponde ae.target@Giovambattista Fazioli: Bhe che dire, avevo provato da buon smanettone con
[cc_actionscript3](e.currentTarget.name).gotoAndPlay(2)[\as]…..tolto il .name e via le parentesi…..e funzia…quindi GRAZIE….:)
@Roberto: mi permetto di concludere, nel caso qualcun’altro cercasse info a riguardo, che nel caso appunto di più mc (es: pulsanti), con un array e un clico è possibile raggruppare i vari mc ed assegnare gli “addEventListener” es:
2
3
4
5
btn_array[i].addEventListener( MouseEvent.CLICK, on_handler );
btn_array[i].addEventListener( MouseEvent.MOUSE_OVER, on_handler );
btn_array[i].addEventListener( MouseEvent.MOUSE_OUT, on_handler );
}
…..salve e spero di essere utile a qualcunaltro….:)
@Roberto: ottimo! Sempre per concludere, se la serie di “pulsanti” (MovieClip) sono inseriti in un MovieClip contenitore, puoi addirittura evitare l’array e ciclare su tutti i “figli” del contenitore stesso. Al riguardo ti consiglio di leggere Tutto quello che avete sempre sognato di fare con Actionscript 3
Saluti e grazie per i tuoi contributi